我有以下的代碼,服務器接受的網絡連接,它傳遞給孩子Manager().Queue()
處理:服務器進程使得管道插座不立即關閉
q = Manager().Queue()
class Server:
def run(self, host, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
print('parent', os.getpid())
while True:
c, _ = s.accept()
q.put(c)
c.close()
def handle_request():
print('child', os.getpid())
while True:
c = q.get()
time.sleep(1)
print(c.recv(4))
c.close()
Process(target=handle_request, args=()).start()
Server().run('127.0.0.1', 10000)
close
不作爲工作預計,我認爲這是因爲Manager
的服務器進程窗口對該套接字有參考,lsof -i
已確認。如何處理這個?我發現沒有辦法在Manager
進程中關閉套接字,shutdown
可以做到這一點,但不是我想要的。
我能看到的是'Server.run'將它放入隊列後立即關閉套接字。所以那個套接字是從那以後關閉的隊列。 – ForceBru
@ForceBru不會,孩子可以正常使用它。 –
你的問題是什麼?爲什麼還有另一個過程?或者爲什麼套接字不關閉? 「不關閉」是什麼意思? – bnaecker