我找到了一个如何在芹菜文档(http://docs.openquake.org/celery-2.4.6/userguide/workers.html#writing-your-own-remote-control-commands)中重启工作者连接的示例:
from celery.worker.control import Panel
@Panel.register
def reset_connection(panel):
panel.logger.critical("Connection reset by remote control.")
panel.consumer.reset_connection()
return {"ok": "connection reset"}
但它仅适用于Celery 3.0及更早版本。在Celery 3.1上的Consumer类中没有这样的功能。
如何立即重新建立与经纪商的联系?
答案 0 :(得分:0)
工人内部被重写为使用3.1中的“bootsteps”(见http://docs.celeryproject.org/en/latest/userguide/extending.html)
我认为从远程控制命令重置代理连接的最佳方法是使用panel.consumer.connection.close()
代替:
from celery.worker.control import Panel, logger as control_logger
@Panel.register
def reset_connection(state):
control_logger.critical("Connection reset by remote control.")
state.consumer.connection.close()
return {"ok": "connection reset"}
这将强制工作人员重新启动所有与消费者相关的启动步骤(请参阅上面链接中的图表)
顺便提一下,panel
参数已重命名为state
,但您可以根据需要为其命名。记录器在状态中不再可用,因此您必须将其导入。