如何在Celery中创建具有不同并发性的任务?

时间:2019-09-27 03:54:34

标签: python rabbitmq celery amqp

以下任务有不同的要求。 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

芹菜有可能吗?

1 个答案:

答案 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