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

问题描述 投票:0回答:1

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

芹菜有可能吗?

python rabbitmq celery amqp
1个回答
0
投票

您可以做的是将任务放入不同的队列(据我所知,您已经做到了),然后运行两个不同的celery worker以不同的并发性监听这些队列。例如:

# non-concurrent worker for slow tasks
celery worker -A proj --concurrency=1 -Q queue-for-slow-tasks
# concurrent worker for fast tasks
celery worker -A proj --concurrency=1 -Q queue-for-fast-tasks
© www.soinside.com 2019 - 2024. All rights reserved.