gpt4 book ai didi

python - celery 任务的应用、运行和调用有什么区别?

转载 作者:行者123 更新时间:2023-12-01 10:59:15 24 4
gpt4 key购买 nike

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

最佳答案

您可以在 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 工作函数,则两者都将重写为 delay()
  • 申请 是使用类似于 apply_async 的语法的形式。所以你的参数被添加为 args/kwargs 关键字:

  • tasks.my_task.apply(kwargs={'foo': 'bar'})

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

    当我想要一个后来变成 apply_async 的语法时,我更喜欢 apply - 通常我更喜欢亲自申请。

    关于python - celery 任务的应用、运行和调用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080101/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com