【问题标题】:Celery worker receiving too many tasks接收太多任务的芹菜工人
【发布时间】:2019-05-08 10:37:02
【问题描述】:

我已经像这样开始了我的芹菜工人:

celery -A workerTasks worker --concurrency 1 --loglevel=info

但我看到它正在接收多个任务:

[2019-05-08 10:33:07,371: INFO/MainProcess] celery@2aaf46abfaed ready.
[2019-05-08 10:33:07,372: INFO/MainProcess] Received task: workerTasks.do_processing_task[a3c19e7a-6b04-4236-8afc-0884547d3f39]  
[2019-05-08 10:33:07,373: INFO/MainProcess] Received task: workerTasks.do_processing_task[f22443c1-6dee-4ecf-8c54-7a7c4da5418e]  
[2019-05-08 10:33:07,373: INFO/MainProcess] Received task: workerTasks.do_processing_task[6eb501b7-c192-46db-be78-6061300b6bdf]  
[2019-05-08 10:33:07,373: INFO/MainProcess] Received task: workerTasks.do_processing_task[ec08b59f-541e-42fc-806d-cfbd40daf7b7]  
[2019-05-08 10:33:07,479: INFO/MainProcess] Received task: workerTasks.do_processing_task[deaaec17-b07c-4476-9b44-9f8e884b0b6e]  

为什么不只是收到一个?

谢谢。

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    我相信这是由于worker_prefetch_multiplier 设置。来自documentation

    一次预取的消息数量乘以消息的数量 并发进程。默认值为 4(每条消息 4 条) 过程)。然而,默认设置通常是一个不错的选择——如果 你有很长的运行任务在队列中等待,你必须 启动工人,注意第一个启动的工人将收到 最初消息数量的四倍。因此,任务可能不是 公平地分配给工人。

    基本上,Celery 会尝试从您的代理批量获取任务。这样做是为了避免过多的往返。

    【讨论】:

    • 我正在设置 app.conf['worker_prefetch_multiplier'] = 1 并且仍然收到五个工作,所以还有其他事情正在发生..
    • 你确定配置真的应用了吗?这些任务实际上是并行执行的吗?如果不确定,请在开头和结尾添加一些打印语句。
    猜你喜欢
    • 2015-09-21
    • 2020-01-03
    • 2021-02-21
    • 2019-09-18
    • 2021-05-30
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多