我正在尝试在芹菜@task decorator之后应用一个decorator,比如。
@send_email
@task
def any_function():
print "inside the function"
我可以按照文档中建议的方式让它工作,即将decorator放在任务decorator之前,但在本例中,我希望访问decorator中的任务实例。
@send_电子邮件必须是一个类装饰器,这是我尝试但没有成功的:
class send_email(object):
''' wraps a Task celery class '''
def __init__(self, obj):
self.wrapped_obj = obj
functools.update_wrapper(self, obj)
def __call__(self, *args, **kwargs):
print "call"
return self.wrapped_obj.__call__(*args, **kwargs)
def run(self, *args, **kwargs):
print "run"
return self.wrapped_obj.__call__(*args, **kwargs)
def __getattr__(self, attr):
if attr in self.__dict__:
return getattr(self, attr)
return getattr(self.wrapped_obj, attr)
我永远无法在调用或运行函数函数中获取print语句以显示在工作进程或调用方中。
我们如何在不依赖于基于类的任务定义的情况下装饰芹菜任务(这样装饰器就在@Task之上,函数定义之上)。
谢谢你的帮助!
米格尔
任务装饰器不返回类,而是返回实例。
似乎您的问题应该是“如何访问decorator内部的任务”,而不是如何首先应用decorator。
在即将发布的3.1(开发版本)中,您可以使用绑定任务来完成此任务:
对于以前的版本,可以使用
current_task
:“before”在视觉上看起来像“after”。
例如,这个:
相当于:
这意味着您必须在
@task
之后写入@send_email
,才能在@task
之前应用它。例如:相关问题 更多 >
编程相关推荐