运行 循环中的相同 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()
如何正确运行这种芹菜任务?
@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()