我将从一个python脚本生成5个不同的进程,如下所示:
p = multiprocessing.Process(target=some_method,args=(arg,))
p.start()
我的问题是,当父进程(主脚本)以某种方式被终止时,子进程继续运行。
当父进程被杀死时,有没有办法杀死子进程,它们是这样生成的?
编辑: 我在尝试:
p = multiprocessing.Process(target=client.start,args=(self.query_interval,))
p.start()
atexit.register(p.terminate)
但这似乎行不通
孩子不会被告知父母的死亡,它只会以另一种方式工作。
但是,当进程结束时,它的所有文件描述符都将关闭。如果选择要读取的管道,则会通知管道的另一端。
因此,父进程可以在生成进程之前创建一个管道(或者实际上,您可以将stdin设置为管道),子进程可以选择该管道进行读取。当父端关闭时,它将报告准备读取。这要求您的孩子运行主循环,或者至少定期调用select。如果你不想这样做,你需要一些管理流程来完成,但是当那个流程被杀死时,事情又会发生变化。
我自己也遇到过同样的问题,我有以下解决方案:
在调用
p.start()
之前,可以设置p.daemon=True
。那么正如这里提到的python.org multiprocessing相关问题 更多 >
编程相关推荐