这是我写的测试用例代码,可以执行后, kill -9 主线程后,子线程并没有退出,仍然在执行,但是如果 ctrl+c,却可以停掉所有的线程。请问如何在父进程结束时,自动回收子进程,谢谢!如果有 pip 模块能解决此问题就更好了。这是我的测试用例代码:# -*- coding: utf-8 -*-# Author: Ztjimport timefrom multiprocessing import Processclass Listen(object):
def listen(self, ):
"""监听"""
for i in range(3):
p = Process(name='Job', target=self.listen_callback, args=(i,))
p.start() @staticmethod
def listen_callback(i):
"""定时进程回调"""
while True:
print('正在执行中(%s)......' % i)
time.sleep(1)if __name__ == '__main__':
listen = Listen()
listen.listen()
2 回答
慕沐林林
TA贡献2016条经验 获得超9个赞
之前也解决过这样的问题,用到了psutil模块,原理就是子进程定期检查父进程是否存在,不存在就退出。例子如下:
from multiprocessing import Processimport timeimport psutilimport osdef worker(pid, n): pps = psutil.Process(pid=pid) while True: try: if pps.status() in (psutil.STATUS_DEAD, psutil.STATUS_STOPPED): break except psutil.NoSuchProcess: break # 处理... print(n, time.time()) time.sleep(1)if __name__ == '__main__': ps = [] pid = os.getpid() for code in ('aa','bb','cc'): p = Process(target=worker, args=(pid, code,)) p.daemon = True p.start() ps.append(p) for p in ps: p.join() print('parent exit!!!!!!')
添加回答
举报
0/150
提交
取消