mytask.apply()
,mytask.run()
和mytask()
有什么区别?哪种方法更好?
最佳答案
您可以在celet包中的celery/app/task.py
或文档http://docs.celeryproject.org/en/latest/reference/celery.app.task.html中找到所有这些内容。
在我自己的调查中详细说明:
delay
的立即(本地阻止)形式,具有相同的限制(传递参数,但是不能访问其他执行选项),并且类似于调用。它会立即返回例如如果发生异常,则调用将完全阻塞,就像调用函数一样。 tasks.my_task.run(foo='bar')
my_task()是已记录的文件,其行为类似于
run
。 (实际上,Task.__call__
执行self.run(*args, **kwargs)
);它可能比run()更为可取,因为它也会做其他事情。tasks.my_task(foo='bar')
,所以在mytask.run()和mytask()之间,我会选择mytask(),除非我知道我想运行。如果将其重写为真正的celery worker函数,则两者都将被重写为delay()
tasks.my_task.apply(kwargs={'foo': 'bar'})
如果将其设置为always_eager,它也是apply_async调用的函数。
副作用是,如果未将其设置为always_eager或未设置throw关键字,则异常将像apply_async一样继续执行。
,当我想拥有一种语法,以后又将其更改为apply_async时,我更喜欢应用-通常我更喜欢个人应用。
关于python - 申请,运行和调用celery任务有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43080101/