我正在编写一个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
异常时,队列无法访问。
如何确保新套接字未打开或立即关闭。