为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2019-08-21 11:47:36
这是我写的测试用例代码,可以执行后,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模块,原理就是子进程定期检查父进程是否存在,不存在就退出。例子如下:
frommultiprocessingimportProcess
importtime
importpsutil
importos
defworker(pid,n):
pps=psutil.Process(pid=pid)
whileTrue:
try:
ifpps.status()in(psutil.STATUS_DEAD,psutil.STATUS_STOPPED):
break
exceptpsutil.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=True
p.start()
ps.append(p)
forpinps:
p.join()
print('parentexit!!!!!!')
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 438 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信