大佬们遇到过这个问题吗?python kill 主线程后如何让子线程也停止执行?求大佬指点!

这是我写的测试用例代码,可以执行后,kill-9主线程后,子线程并没有退出,仍然在执行,但是如果ctrl+c,却可以停掉所有的线程。请问如何在父进程结束时,自动回收子进程,谢谢!
如果有pip模块能解决此问题就更好了。
这是我的测试用例代码:
#-*-coding:utf-8-*-
#Author:Ztj
importtime
frommultiprocessingimportProcess
classListen(object):
deflisten(self,):
"""监听"""
foriinrange(3):
p=Process(name='Job',target=self.listen_callback,args=(i,))
p.start()
@staticmethod
deflisten_callback(i):
"""定时进程回调"""
whileTrue:
print('正在执行中(%s)......'%i)
time.sleep(1)
if__name__=='__main__':
listen=Listen()
listen.listen()
当年话下
浏览 439回答 2
2回答

慕神8447489

之前也解决过这样的问题,用到了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!!!!!!')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript