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