duh*_*ime 2 python message-passing redis celery
我正在使用Redis后端和代理在Celery中处理数据处理例程。许多工人(约200名)与经纪人互动以获取任务并执行这些任务。但是,我的所有工人都相互发送心跳信号,这使他们的日志中充满了各种杂物,如下所示:
[2018-05-13 15:38:00,737: INFO/MainProcess] missed heartbeat from celery@d12chas387.crc.nd.edu
[2018-05-13 15:38:00,737: INFO/MainProcess] missed heartbeat from celery@d12chas530.crc.nd.edu
[2018-05-13 15:38:00,737: INFO/MainProcess] missed heartbeat from celery@d12chas531.crc.nd.edu
[2018-05-13 15:38:00,738: INFO/MainProcess] missed heartbeat from celery@d12chas351.crc.nd.edu
[2018-05-13 15:38:00,738: INFO/MainProcess] missed heartbeat from celery@d12chas515.crc.nd.edu
[2018-05-13 15:38:00,739: INFO/MainProcess] missed heartbeat from celery@d12chas492.crc.nd.edu
Run Code Online (Sandbox Code Playgroud)
工人们永远不要直接相互联系,他们都应该从经纪人那里获得所需的信息。是否可以禁用辅助节点之间的心跳?如果是这样,由于某种原因我还没有看到这是个坏主意吗?
小智 7
您可以尝试使用--with-gossip来运行您的工作程序,以防止发生这种情况。从Celery 3.1开始,工作人员开始被动地订阅其他工作人员事件,例如心跳。
添加了八卦,以允许celery用户利用工作人员通信的优势,例如将任务重新路由到最佳工作人员,但是如果没有必要与工作人员进行通信,则可以禁用此功能。您可以在这里详细了解什么是八卦/为什么被引入:Celery 3.1新增功能。
您也可以添加--without-mingle选项以在启动时禁用工作程序同步。
另外,这个问题似乎与之相关:芹菜错过了心跳(on_node_lost)