我试图设置一个工作守护进程来处理来自rabbitmq的消息。我用的是pika和它的SelectConnection。如果我不把它作为守护进程运行的话,代码运行得很好。我可以用
py worker.py
以及
^{pr2}$成功了。但是,当我补充
import daemon
with daemon.DaemonContext():
connection.ioloop.start()
到工人.py,虽然代码不会引发任何异常,但它会停止从队列中获取消息,并使我的CPU利用率达到最大。工人.py看起来很像this示例。在
谢谢。在
首先,我不知道您从哪里得到这个守护程序模块,但是我注意到您的示例中是
import
守护程序,而不是pika。在我强烈怀疑您在将进程转换为守护程序之前使用了pika(甚至import在模块中执行代码)。这意味着您在RAM中有在守护进程分叉时被复制的资源,如果这个守护进程模块做了正确的事情,那么在这个过程中任何打开的套接字或文件都将被强制关闭。在
最好不要有任何生存期超过守护进程边界的对象。使守护进程完全独立于任何其他处理运行,并让它们通过消息传递(如AMQP或0MQ)与其他进程通信。在
相关问题 更多 >
编程相关推荐