以下任务有不同的要求。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
芹菜可以吗?
你可以做的是将任务放到不同的队列中(据我所知,你已经这样做了(,然后运行两个不同的芹菜工作线程来监听这些队列,具有不同的并发性。例如:
# 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