使用celery实现连续运行的守护进程

时间:2013-10-05 08:38:58

标签: python django ipc celery daemon

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

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

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

但是,我对发送命令感到有些困惑。我将需要Django网络应用程序以某种方式与监视器服务进行通信。我可以按照推荐here使用Pyro,但我更倾向于使用Celery,因为我已经将它用于系统的其他部分。

如何让Celery工作人员同时管理监视器连接为Celery请求提供服务?

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

1 个答案:

答案 0 :(得分:2)

如果确实想要在这个用例中使用Celery,我建议你定义一个分离的队列即server_monitor并将所有服务器监控任务路由到队列。现在,为了避免与服务器建立多个连接,请使用-c 1运行worker。

此外,由于您希望能够处理服务器监视器事件和Celery请求,因此请命令新工作程序为两个队列-q celery,server_monitor提供服务。这样,工作人员将提供两种类型的请求,但要注意 - 如果您的celery队列流量很大,则可能需要很长时间才能处理来自server_monitor队列的请求。