Python 在循环中运行相同的芹菜任务

Python 在循环中运行相同的芹菜任务,python,celery,Python,Celery,如何正确运行这种芹菜任务 @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(),但在本例中,返回

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

@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个任务都在后台顺序运行

芹菜中有一个group(),但它并行运行任务

如果在芹菜外执行某些_func()(例如,使用脚本作为“生产者”来发送要执行的任务),则没有什么可以阻止您调用AsyncResult上的.get(),以等待任务完成,并尽可能多地循环该任务

然而,如果您想将该循环作为某种芹菜工作流来执行,那么您必须构建并使用它。

如果某个函数()在芹菜之外执行(例如,将一个脚本用作“生产者”来发送要执行的任务),那么没有任何东西可以阻止您在AsyncResult上调用.get()以等待任务完成,你想怎么做就怎么做


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

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

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

最后,我使用不可变签名和链解决了这个问题

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

尝试,但将取决于您尝试完成的任务,可能您需要周期性任务。尝试,但将取决于您尝试完成的任务,可能您需要周期性任务。当我使用.get()时,它将等待所有任务完成。但我需要返回结果,但要在后台运行任务。所以,对于这个,我需要使用chain吗?是的,因为它似乎是芹菜工作流的一部分。当我使用.get()时,它会等待所有任务完成。但我需要返回结果,但要在后台运行任务。所以,对于这个,我需要使用链吗?是的,因为它似乎是芹菜工作流程的一部分。