Python 使用芹菜实现持续运行的守护进程

Python 使用芹菜实现持续运行的守护进程,python,django,ipc,celery,daemon,Python,Django,Ipc,Celery,Daemon,我正在开发一个包含两个组件的系统——Django web应用程序和监视进程 监视器进程连接到某个TCP/IP服务器,并使用专有协议接收事件指示。它还可以使用专有协议向服务器发送命令 我想将监视器作为守护进程运行。它将连接到服务器并持续监视传入事件。每当事件到达时,监控器将更新数据库。web应用程序将从数据库获取当前状态 不过,我对发送命令有点纠结。我需要Django web应用程序以某种方式与monitor服务通信。我可以按照建议使用Pyro,但我更愿意使用芹菜,因为我已经在系统的其他部分使用它

我正在开发一个包含两个组件的系统——Django web应用程序和监视进程

监视器进程连接到某个TCP/IP服务器,并使用专有协议接收事件指示。它还可以使用专有协议向服务器发送命令

我想将监视器作为守护进程运行。它将连接到服务器并持续监视传入事件。每当事件到达时,监控器将更新数据库。web应用程序将从数据库获取当前状态

不过,我对发送命令有点纠结。我需要Django web应用程序以某种方式与monitor服务通信。我可以按照建议使用Pyro,但我更愿意使用芹菜,因为我已经在系统的其他部分使用它了

如何让芹菜工人管理监视器连接和服务芹菜请求

注意:由于专有协议的限制,我无法打开到服务器的两个连接,因此不能让一个进程监视事件,另一个进程发送命令。

如果您真的想在这个用例中使用芹菜,我建议您最好定义一个单独的队列,即
server\u monitor
,并将所有服务器监视器任务路由到该队列。现在,为了避免与服务器有多个连接,请使用
-c1
运行worker


另外,由于您希望能够处理服务器监视器事件和芹菜请求,请命令新的工作人员为这两个队列提供服务
-q芹菜,服务器监视器
。这样,工作者将为这两种类型的请求提供服务,但要小心-如果您的
芹菜
队列流量很大,处理来自
server\u monitor
队列的请求可能需要很长时间。

问题在于“服务器监视器任务”-监视器使用直接套接字和选择循环运行这些任务和监视器。因为只有一个进程运行这些任务,您可以在辅助进程内创建一个监视器,该监视器将接收命令并向服务器发送命令。是否在辅助进程中启动另一个线程?好主意!我可以在一个特定的任务(启动监视)中这样做,但我更希望它在守护进程启动时自动发生。工人们能处理这样的启动事件吗?你可以连接到多个信号,在这些信号中使用。整个信号列表是。您可以连接到工作程序代码中的
signals.celeryd\u after\u setup
信号(这应该在全局名称空间中,因此它会立即运行),在这里,您会被传递整个配置,从而可以决定传递的工作程序参数的操作。