应用、运行和调用芹菜任务有什么区别?



mytask.apply()mytask.run()mytask()有什么区别?哪种方式更可取?

您可以在celery/app/task.py的 celery 包中找到所有这些,或者在文档 http://docs.celeryproject.org/en/latest/reference/celery.app.task.html

在我自己的调查中详细说明:

  • run是具有相同限制的即时(本地阻塞)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(),除非我知道我想运行。如果它被重写为真正的芹菜工人函数,两者都将被重写为 delay()

  • apply是使用类似于 apply_async 的语法的形式,因此您的参数被添加为 args/kwargs 关键字:
tasks.my_task.apply(kwargs={'foo': 'bar'})

如果设置为always_eager,它也是apply_async调用的函数。 副作用是,如果异常未设置为 always_eager 或未设置 throw 关键字,则异常将继续执行,就像apply_async一样。

当我想有一个语法后来更改为apply_async时,我更喜欢应用——一般来说,我更喜欢个人应用。

在我的理解中:

  • apply:是调用任务并在本地执行
  • run: 从未见过
  • mytask(): 就像呼叫函数一样

如果要发送消息并远程执行,则应使用apply_asyncdelay,引用call_task。

相关内容

  • 没有找到相关文章

最新更新