J'ai une fonction de tâche de céleri qui ressemble this-attributs Céleri personnalisé fonction de tâche
@task(base=MyBaseTask)
@my_custom_decorator
def my_task(*args, **kwargs):
my_task.ltc.some_func() #fails - attribute ltc doesn't exist on the object
et my_custom_decorator ressemble à ce
def my_custom_decorator (f):
from functools import wraps
ltc = SomeClass()
@wraps(f)
def _inner(*args, **kwargs):
ret_obj = None
try:
f.task_cache = ltc
ret_obj = f(*args, **kwargs)
except Exception, e:
raise
return ret_obj
_inner.ltc = ltc
return _inner
Je vois que cela est parce que l'objet appelable réel qui est invoqué pour exécuter la tâche est un objet de type classe de tâche céleri. Comment puis-je conserver mon attribut 'ltc' sur cet objet pour pouvoir y accéder à partir de la tâche comme indiqué ci-dessus i.e - my_task.ltc.some_func()
?
Merci,
Cela ne signifie-t-il pas que la fonction décorée doit prendre en argument ltc? – ksrini
C'est. Et n'a pas de problèmes. Je suis désolé, je n'ai pas vérifié ce que tu faisais exactement. Le problème est que lorsque le code my_task est exécuté, le nom my_task pointe vers une autre fonction qui est retournée par '@ task', et cette fonction n'a pas d'attribut ltc. Vous devriez vérifier si '@ task' expose la fonction interne via un attribut. – tenuki