首页 > 解决方案 > 无法使用 ProcessPoolExecutor 杀死子进程?

问题描述

from concurrent.futures import ProcessPoolExecutor
import time

def foo(num):
    time.sleep(0.5)
    print(num)


if __name__ == "__main__":
    while True:
        with ProcessPoolExecutor(max_workers=8) as exe:
            exe.map(foo, range(1,4))

我正在尝试使用 module ProcessPoolExecutor。并且在主进程启动一段时间后,我想使用 linux kill 命令杀死该进程kill -9 main_process_pid。然后我发现只有主进程被杀死,但子进程仍然活跃。


user     41502 41004  5 16:16 pts/202  00:00:00 python demo.py
user     42009 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42010 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42011 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42012 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42013 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42015 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42025 41502  0 16:16 pts/202  00:00:00 python demo.py
user     42026 41502  0 16:16 pts/202  00:00:00 python demo.py


在我跑之后 kill -9 41502,它变成了


user     45109     1  0 16:17 pts/202  00:00:00 python demo.py
user     45110     1  0 16:17 pts/202  00:00:00 python demo.py
user     45111     1  0 16:17 pts/202  00:00:00 python demo.py
user     45112     1  0 16:17 pts/202  00:00:00 python demo.py
user     45113     1  0 16:17 pts/202  00:00:00 python demo.py
user     45114     1  0 16:17 pts/202  00:00:00 python demo.py
user     45115     1  0 16:17 pts/202  00:00:00 python demo.py
user     45116     1  0 16:17 pts/202  00:00:00 python demo.py

在关闭主进程时我应该怎么做才能杀死所有子进程?

标签: pythonprocess

解决方案



推荐阅读