我有一個Python2.7腳本,它執行一些並行性魔術,最後進入Flask gui_loop。在某個點上,一個線程使用subprocess.Popen創建一個後臺進程。這工作。Python subprocess.Popen() - 子進程導致套接字保持打開狀態
當我的腳本將退出,如果子進程仍然在運行,我不能再運行我的腳本,如燒瓶gui_loop失敗:
socket.error: [Errno 98] Address already in use
用netstat -peanut我可以看到插座的所有權在python腳本退出時轉移到子進程。這是當兩個python腳本和子進程正在運行它的外觀:
[email protected]:/tmp# netstat -peanut | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 1000 840210 21458/python
終止Python腳本,插座不會關閉後,但其所有權被傳遞到子進程:
[email protected]:~/PycharmProjects/foo/gui# netstat -peanut | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 1000 763103 19559/my-subprocess
有有什麼辦法呢?子進程(用C語言編寫)沒有在該套接字上做任何事情,也不需要它。我可以以某種方式創建一個沒有通過gui循環套接字資源給它的子進程?
我當然可以終止這個過程,但這並不理想,因爲這樣做的目的是圍繞一些計算構建一個簡單的gui,如果gui腳本恰好退出,則不會失去進度。如果我能夠重新啓動並運行gui腳本,我會有一個重新連接子進程的機制。
[R
這似乎是個伎倆。謝謝。 –