다른 장치와의 더 빠른 통신을 처리하기 위해 Ubuntu의 Python 3.6에서 다중 처리를 사용하고 있습니다.Python Multiprocessing : 상위 프로세스가 종료 될 때 데몬 프로세스를 종료하는 더 나은 구현은 무엇입니까?
부모 프로세스가 완료되면 하위 프로세스를 종료하도록 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()
을 사용하지 않아야한다고 생각합니다. 그러나 오해하는 경우 알려 주시기 바랍니다. 주의 소멸자에서 python3 워드 프로세서, process.terminate()에서
감사합니다. 이미 두 가지 해결책이 있지만 어느 것이 더 나은지 잘 모릅니다. SO_REUSEADDR을 사용해도 안전합니까? 주 소멸자가 프로세스를 종료 할 때마다 호출됩니까? – kangaroo