多处理管理器中的套接字泄漏

时间:2014-08-05 22:20:32

标签: python sockets multiprocessing ipc

我正在编写一个Python应用程序,其中有Master进程,它创建了一个multiprocessing.manager对象和一个Queue(名为ListenQueue)。 稍后,这个主进程启动子进程(大约8个),向其发送上述ListenQueue对象以及新创建的Manager.Queue对象(名为ProcQueue)。 此ProcQueue对象是每个子进程创建的队列,在该进程上,它们会一直监听消息。类似地,主进程也在监听来自子进程的消息的ListenQueue。

所以这是大局,

主要流程:

while True:
    msg = ListenQueue.get()
    process msg ...

子进程:

while True:
    msg1 = ProcQueue.get()
    process msg1

现在,当我想向处理的子邮件发送邮件时,我将其添加到单独的ProcQueue中,

Child1.ProcQueue.put(msg2)
Child2.ProcQueue.put(msg2)
....

当我的孩子想要向主流程发送消息时,

ListenQueue.put(msg3)

现在问题是当子进程向主进程发送消息时,它会在调用put()时打开套接字。 (选中&#34; lsof -p <pid> | grep socket&#34;) 但是当主进程发送任何消息时,它不会为每个put消息打开任何新套接字。

我尝试使用multiprocessing.Queue,但它似乎使用了一些同步/锁定,并且在交换数百条消息时速度变慢。

因此,此套接字计数不断增加到某个最大数量(大约1024),并且在发件人进程发生EOFError异常时,队列无法访问。

如何确保新套接字未打开或立即关闭。

0 个答案:

没有答案