Sau*_*rma 17 python multiprocessing
我正在从python脚本中生成5个不同的进程,如下所示:
p = multiprocessing.Process(target=some_method,args=(arg,))
p.start()
Run Code Online (Sandbox Code Playgroud)
我的问题是,当某个父进程(主脚本)被杀死时,子进程继续运行.
当父母被杀时,有没有办法杀死这样产生的子进程?
编辑:我正在尝试这个:
p = multiprocessing.Process(target=client.start,args=(self.query_interval,))
p.start()
atexit.register(p.terminate)
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有奏效
fly*_*lee 18
我自己遇到了同样的问题,我有以下解决方案:
在打电话之前p.start(),你可以设定p.daemon=True.然后就像这里提到的python.org多处理
当进程退出时,它会尝试终止其所有守护进程子进程.
孩子不会收到父母死亡的通知,它只会以另一种方式工作。
但是,当一个进程终止时,它的所有文件描述符都将关闭。如果管道的另一端选择了要读取的管道,则会通知管道的另一端。
所以你的父母可以在产生进程之前创建一个管道(或者实际上,你可以将 stdin 设置为管道),孩子可以选择它进行阅读。当父端关闭时,它将报告准备好阅读。这需要您的孩子运行主循环,或者至少定期调用选择。如果你不想那样做,你需要一些管理器进程来做,但是当那个进程被杀死时,事情又会崩溃。