Django-芹菜:@transaction和@task don';t堆栈
我想运行带有手动事务管理的Django-Cellery任务,但是注释似乎没有堆叠 e、 g 导致Django-芹菜:@transaction和@task don';t堆栈,django,celery,django-celery,Django,Celery,Django Celery,我想运行带有手动事务管理的Django-Cellery任务,但是注释似乎没有堆叠 e、 g 导致 TypeError: pong() got an unexpected keyword argument 'task_name' ---> 22 pong.delay('arg') AttributeError: 'function' object has no attribute 'delay' 而反向注释顺序会导致 TypeError: pong() got an unexp
TypeError: pong() got an unexpected keyword argument 'task_name'
---> 22 pong.delay('arg')
AttributeError: 'function' object has no attribute 'delay'
而反向注释顺序会导致
TypeError: pong() got an unexpected keyword argument 'task_name'
---> 22 pong.delay('arg')
AttributeError: 'function' object has no attribute 'delay'
这是有道理的,但我很难找到一个好的解决办法。Django文档没有提到注释的替代方法,我也不想在不需要的时候为每个芹菜任务创建一个类
有什么想法吗 任务装饰器使用
run
方法作为目标,从函数中生成类x(任务)
。建议您定义类并修饰方法
未经测试,例如:
class pong(Task):
ignore_result = True
@transaction.commit_manually()
def run(self,arg,**kwargs):
print 'pong: %s' % arg
transaction.rollback()
以前芹菜有一些魔力,其中有一组默认的关键字参数 如果任务接受,则传递给任务 自版本2.2以来,您可以禁用此行为,但最简单的方法是 从西芹.task导入
任务
装饰器,而不是西芹.decorators:
from celery.task import task
@task
@transaction.commit_manually
def t():
pass
decorators
模块已弃用,将在3.0中完全删除,
“神奇关键字参数”也是如此
注:
对于自定义任务类,应将accept\u magic\u kwargs
属性设置为False:
class MyTask(Task):
accept_magic_kwargs = False
注意2:请确保您的自定义装饰器使用
functools.wrapps保留函数的名称,否则任务将以错误的名称结束。希望找到一种非类的方法来完成此任务,但我想这是最好的选择。谢谢这正是我所希望的!谢谢