You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Multiprocessing失效:Pool.apply/Pool.map无响应,脚本持续运行

解决Multiprocessing脚本持续运行无响应的问题

先看你代码里的一个明显小问题——你用了大写的Print(),但Python的内置打印函数是小写的print()。这个错误会导致子进程执行时抛出异常,但因为multiprocessing的子进程异常不会直接在主进程显示出来,反而会让整个程序卡住。先把这个修正过来,代码应该改成这样:

from multiprocessing import Pool

def doubler(number):
    return number * 2

if __name__ == '__main__':
    numbers = [5, 10, 20]
    pool = Pool(processes=4)
    print(pool.map(doubler, numbers))

如果修正后还是卡住,那大概率是系统或环境层面的问题,可以从这几个方向排查:

  • Windows系统的进程启动限制:Windows下multiprocessing默认用spawn方式创建进程,这种方式会重新导入主模块。如果你的脚本里有其他顶级代码(不在if __name__ == '__main__'块里的),可能会触发无限创建子进程的死循环,直接导致程序卡住。一定要确保所有实际执行的逻辑都包裹在if __name__ == '__main__'里面。

  • 系统资源不足:如果你的CPU或内存被其他程序占满了,Pool创建的子进程可能无法正常启动或执行。先关闭一些占用资源的程序,再试试脚本。另外也可以把processes参数调小一点(比如改成2),避免一次性创建过多进程拖垮系统。

  • 排查子进程的隐藏异常:有时候子进程抛出了异常但主进程感知不到,看起来就像程序卡住了。你可以给doubler函数加上日志或者异常捕获,或者用apply_async配合回调函数来追踪执行情况:

from multiprocessing import Pool
import traceback

def doubler(number):
    try:
        print(f"正在处理数字: {number}")
        return number * 2
    except Exception as e:
        traceback.print_exc()
        return None

def handle_result(result):
    print(f"收到结果: {result}")

if __name__ == '__main__':
    numbers = [5, 10, 20]
    pool = Pool(processes=2)
    for num in numbers:
        pool.apply_async(doubler, args=(num,), callback=handle_result)
    pool.close()
    pool.join()

这样能清楚看到子进程里的执行细节,方便排查是否有隐藏的问题。

  • 检查安全软件的拦截:有些杀毒软件或系统安全工具可能会阻止Python创建子进程,导致进程无法正常启动。可以暂时关闭这类工具,再测试脚本能不能正常运行。

内容的提问来源于stack exchange,提问作者user11475892

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:24:37