以下任务有不同的要求。 slow
任务应该只能一个接一个地执行。 fast
任务可以执行相同(或更多)操作,但应独立于slow
任务。
我将它们绑定到不同的队列,但是全局并发仍然适用于这两个队列。如果任务的1
是从两个队列之一中拉出的,或者任务是>1
,则较慢的任务可以有多个它不应该执行的执行。
@app.task
def slow(x, y):
# slow operation, only one at a time with concurrency of 1
heavy_operation_takes_10_minutes()
@app.task
def fast(x, y):
# can also be concurrency of 1 or more, as long as independent of `slow` task
# ...
return x + y
芹菜有可能吗?
答案 0 :(得分:0)
您可以做的是将任务放入不同的队列(据我所知,您已经做到了),然后运行两个不同的celery worker以不同的并发性监听这些队列。例如:
# non-concurrent worker for slow tasks
celery worker -A proj -Q queue-for-slow-tasks --concurrency=1
# concurrent worker for fast tasks
celery worker -A proj -Q queue-for-fast-tasks