【问题标题】:Celery: per task concurrency limits (# of workers per task)?芹菜:每个任务的并发限制(每个任务的工人数)?
【发布时间】:2012-02-28 08:58:09
【问题描述】:

是否可以在Celery 的每个任务级别上设置并发(同时工作的人数)?我正在寻找比CELERYD_CONCURRENCY(设置整个守护进程的并发)更细粒度的东西。

使用场景是:我有一个 celerlyd 运行不同类型的任务,具有非常不同的性能特征 - 有些很快,有些非常慢。对于一些人,我想尽可能快地做尽可能多的事情,对于另一些人,我想确保任何时候都只有一个实例在运行(即并发 1)。

【问题讨论】:

    标签: celery django-celery


    【解决方案1】:

    您可以使用automatic routing 将任务路由到不同的队列,这些队列将由具有不同并发级别的 celery worker 处理。

    celeryd-multi 启动快慢 -c:slow 3 -c:fast 5

    此命令启动 2 个 celery 工作人员,分别以 3 和 5 个并发级别监听 fastslow 队列。

    CELERY_ROUTES = {"tasks.a": {"queue": "slow"}, "tasks.b": {"queue": “快”}}

    tasks.a 类型的任务将分别由 slow 队列和 tasks.b 任务分别由 fast 队列处理。

    【讨论】:

    • 谢谢 0x00mh。所以我可以在队列上定义并发,但不能在任务上定义。我相信这意味着我正在启动多个 celery 守护进程。所以我想这意味着如果不使用单独的守护进程就无法设置每个任务的并发性?
    • CELERYD_CONCURRENCY 定义要启动多少进程(工作进程)。工作进程独立地使用来自代理的消息。消息包含要执行的任务名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2017-04-23
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多