我在Ubuntu上使用Python 3.6上的多處理來處理與另一個設備的更快通信。Python多重處理:父進程終止時終止守護進程的更好實現是什麼?
我設置daemon = True
當父進程完成時終止子進程。但是,當主進程終止時,另一個進程(以下代碼中的_another_process)有時不會終止並繼續保持活動狀態。然後,當我再次運行相同的程序時,運行上面的代碼時出現address already in use
錯誤。當然,我可以殺死這個過程,但這很煩人,我想解決。
Class Xxx
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.settimeout(2.5)
self.sock.bind((self.ip, self.port))
self.sock.settimeout(None)
self.start_process()
time.sleep(1.5)
def start_process(self):
p = mp.Process(target=self._another_process)
time.sleep(1)
p.daemon = True
p.start()
def _another_process(self):
while True:
# Do continuous (infinite) operation
我不知道爲什麼有時終止,有時沒有,但有沒有更好的實現來實現我想要什麼?或者,是daemon = True
最好的方法?
我相信我不應該使用join()
,因爲我的子進程有無限的操作,但是如果我誤解了,請告訴我。
謝謝。我已經有兩個解決方案,但不知道哪個更好。使用SO_REUSEADDR安全嗎?每次終止進程時調用main析構函數嗎? – kangaroo