私は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()
を使用すべきではないと思いますが、私が誤解している場合は教えてください。メインのデストラクタで
ありがとうございます。私はすでに2つの解決策を得ていますが、どちらが良いかわかりません。 SO_REUSEADDRの使用は安全ですか?メインのデストラクタはプロセスを終了するたびに呼び出されますか? – kangaroo