【发布时间】:2023-05-11 12:50:01
【问题描述】:
我在 Ubuntu 上的 Python 3.6 上使用多处理来处理与另一台设备的更快通信。
我设置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 安全吗?终止进程时是否调用主析构函数?
标签: python linux multiprocessing