使用 Celery 作为管道

Yif*_*ang 5 python celery

这是使用 Celery 作为管道的最佳方法吗:TaskA -> TaskB -> TaskC?我对 Celery 一无所知,并且文档实际上没有解释太多在实际应用程序中应该如何完成事情。

@app.task
def taskA(t_id):
    if success:
        TaskB.delay(t_id)
    else:
        ReportError.delay(t_id)

@app.task
def taskAA(t_id):
    if success:
        TaskB.delay(t_id)
    else:
        ReportError.delay(t_id)

@app.task
def taskB(t_id):
    if success:
        TaskC.delay(t_id)
    else:
        ReportError.delay(t_id)
Run Code Online (Sandbox Code Playgroud)

也许我不应该使用 Celery 来完成这种任务......

Ian*_*ten 6

正如其他评论者所说,您可以使用链。请参阅https://celery.readthedocs.org/en/latest/userguide/canvas.html#chains了解更多信息。根据您原来的问题,如下所示:

from celery import chain

ret = chain(taskA.s(), taskB.s(), taskC.s()).apply_async()

if ret.status == u'SUCCESS':
    print "result:", ret.get()
Run Code Online (Sandbox Code Playgroud)