Python multiprocessing Pool无法响应KeyboardInterrupt问题
multiprocessing.Pool中
KeyboardInterrupt无法终止Python程序 问题现象
运行以下multiprocessing.Pool代码时,按下CTRL+C触发KeyboardInterrupt后,子进程会中断停止,但主进程不响应中断,反而重新生成新的子进程,无法终止程序。
复现代码
import multiprocessing as mp import time print(f"INIT {__name__}") def worker(a): time.sleep(999) def main(): with mp.Pool(2) as p: for _ in p.imap(worker, range(3)): ... if __name__ == "__main__": main()
控制台输出
INIT __main__ INIT __mp_main__ INIT __mp_main__ Process SpawnPoolWorker-2: Process SpawnPoolWorker-1: Traceback (most recent call last): Traceback (most recent call last): File "Lib\multiprocessing\process.py", line 314, in _bootstrap self.run() File "Lib\multiprocessing\process.py", line 108, in run self._target(*self._args, **self._kwargs) File "Lib\multiprocessing\pool.py", line 125, in worker result = (True, func(*args, **kwds)) ^^^^^^^^^^^^^^^^^^^ File "C:\WIN_PROJEKTE\informatik\synthetic-data-generation\src\test2.py", line 8, in worker time.sleep(999) KeyboardInterrupt File "Lib\multiprocessing\process.py", line 314, in _bootstrap self.run() File "Lib\multiprocessing\process.py", line 108, in run self._target(*self._args, **self._kwargs) File "Lib\multiprocessing\pool.py", line 125, in worker result = (True, func(*args, **kwds)) ^^^^^^^^^^^^^^^^^^^ File "test2.py", line 8, in worker time.sleep(999) KeyboardInterrupt INIT __mp_main__ INIT __mp_main__
预期效果
按下CTRL+C时,主进程应直接终止,而非子进程中断后重启。多次按下CTRL+C仍存在相同问题。
已尝试操作
- 在Windows和Linux系统测试
- 使用Python 3.11.3和Python 3.13.0版本
- 设置信号处理器
- 测试子进程快速结束的场景无问题,示例代码:
def worker(a): return 1 def main(): with mp.Pool(2) as p: for _ in p.imap(worker, range(100_000_000)): pass
内容的提问来源于stack exchange,提问作者Mcs000
相关产品推荐
相关产品推荐

