python kill 主线程后如何让子线程也停止执行?

这是我写的测试用例代码,可以执行后, 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()


婷婷同学_
浏览 2664回答 2
2回答

慕沐林林

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

相关分类

Python