2
我有芹菜任务功能,看起来像这 -芹菜任务功能的自定义属性
@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
和my_custom_decorator看起来像这样
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
我看,这是因为实际的可调用的对象,被调用来执行任务的是celery任务类的对象。 如何在此对象上保留我的属性'ltc',以便可以从任务中访问,如上所示 - 即my_task.ltc.some_func()
?
感谢,
这不是说装饰函数应该把ltc作为参数吗? – ksrini
是的。并没有问题。对不起,我没有检查你到底在做什么。问题是当执行my_task代码时,名称my_task指向由@ @ task返回的其他函数,并且该函数没有ltc属性。你应该检查'@ task'是否通过某些属性暴露了内部函数.. – tenuki