芹菜:禁用工人之间的心跳

时间:2018-05-14 11:16:09

标签: python redis celery message-passing

我正在使用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

工人不应该直接相互联系,他们都应该从经纪人那里获得所需的信息。是否可以在工作节点之间禁用心跳?如果是这样,由于某种原因我还没看到这个是个坏主意吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试使用--without-gossip来运行您的工作程序,以防止发生这种情况。从Celery 3.1开始,工作人员开始被动地订阅其他工作人员事件,例如心跳。

添加了八卦,以允许芹菜用户利用工作人员通信的优势,例如将任务重新路由到最佳工作人员,但是如果没有必要与工作人员进行通信,则可以禁用此功能。 您可以在Celery 3.1 What's New上详细了解什么是工作八卦/为什么引入它。

您还可以添加--without-mingle选项以在启动时禁用工作程序同步。

另外,这个问题似乎与以下内容有关:celery missed heartbeat (on_node_lost)