Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django-芹菜:@transaction和@task don';t堆栈_Django_Celery_Django Celery - Fatal编程技术网

Django-芹菜:@transaction和@task don';t堆栈

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

我想运行带有手动事务管理的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 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保留函数的名称,否则任务将以错误的名称结束。

希望找到一种非类的方法来完成此任务,但我想这是最好的选择。谢谢这正是我所希望的!谢谢