运行 循环中的相同 celery 任务

Run a same celery task in loop

如何正确运行这种芹菜任务?

@app.task
def add(x)
    x + 1


def some_func():
    result = 'result'
    for i in range(10):
        task_id = uuid()
        add.apply_async((i,)), task_id=task_id)
    return result

我需要在完成前一个任务后按顺序执行所有任务。 我尝试使用 time.sleep() 但在这种情况下,返回结果会等待所有任务完成。但是我需要返回结果,所有 10 个任务都在后台 运行ning。

celery 中有一个 group(),但它 运行s 任务是并行的

如果 some_func() 在 Celery 外部执行(假设一个脚本被用作“生产者”来发送那些要执行的任务),那么没有什么能阻止你在 AsyncResult 上调用 .get() 到等待任务完成,并尽可能多地循环。

但是,如果您想将该循环作为某种 Celery 工作流来执行,那么您必须构建一个 Chain 并使用它。

最后我用不可变签名和链解决了

tasks = [
    add.si(x).set(task_id=uuid())
    for x in range(10)
]
chain(*tasks).apply_async()