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()
  • 应用是一种使用类似于apply_async的语法的形式。因此您的参数将作为args / kwargs关键字添加:

  • 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/

    10-10 07:19