mytask.apply()
,mytask.run()
和mytask()
之间有什么区别?哪种方式更可取?
答案 0 :(得分:0)
根据我的理解:
apply
:是调用任务并在本地执行run
:从未见过mytask()
:就像调用func 如果您想发送消息并执行远程操作,则应使用apply_async
或delay
,引用call_task。
答案 1 :(得分:0)
您可以在celery/app/task.py
的celery包中或在文档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时,我更喜欢应用-通常我更喜欢个人应用。