我能经营皮卡吗connection.ioloop.start()在后台程序中?

2024-10-02 10:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图设置一个工作守护进程来处理来自rabbitmq的消息。我用的是pika和它的SelectConnection。如果我不把它作为守护进程运行的话,代码运行得很好。我可以用

py worker.py

以及

^{pr2}$

成功了。但是,当我补充

import daemon
with daemon.DaemonContext():
    connection.ioloop.start()

到工人.py,虽然代码不会引发任何异常,但它会停止从队列中获取消息,并使我的CPU利用率达到最大。工人.py看起来很像this示例。在

谢谢。在


Tags: pyimport消息进程withrabbitmqconnectionpika
1条回答
网友
1楼 · 发布于 2024-10-02 10:23:49

首先,我不知道您从哪里得到这个守护程序模块,但是我注意到您的示例中是import守护程序,而不是pika。在

import daemon
with daemon.DaemonContext():
    import pika
    # any additional pika code here, maybe the creation of connection?
    connection.ioloop.start()

我强烈怀疑您在将进程转换为守护程序之前使用了pika(甚至import在模块中执行代码)。这意味着您在RAM中有在守护进程分叉时被复制的资源,如果这个守护进程模块做了正确的事情,那么在这个过程中任何打开的套接字或文件都将被强制关闭。在

最好不要有任何生存期超过守护进程边界的对象。使守护进程完全独立于任何其他处理运行,并让它们通过消息传递(如AMQP或0MQ)与其他进程通信。在

相关问题 更多 >

    热门问题