python kill 主线程后如何让子线程也停止执行?
这是我写的测试用例代码,可以执行后, kill -9 主线程后,子线程并没有退出,仍然在执行,但是如果 ctrl+c,却可以停掉所有的线程。请问如何在父进程结束时,自动回收子进程,谢谢!
如果有 pip 模块能解决此问题就更好了。
这是我的测试用例代码:
# -*- coding: utf-8 -*-
# Author: Ztj
import time
from multiprocessing import Process
class 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()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
之前也解决过这样的问题,用到了psutil模块,原理就是子进程定期检查父进程是否存在,不存在就退出。例子如下:
@weizw 提供的方法是子进程自查自杀。可以避免孤儿进程继续存活。不过还请首先做到2.说的,主进程要能响应非SIGKILL信号,承担终止子进程的责任。
一个思考题:
你的代码跑起来后,kill掉主进程,这时原先的三个子进程还在跑,并且打印屏幕,这时Ctrl+C是否还能终止它们?为什么?
看懂了APUE的信号和进程控制部分,心里就会有答案了。