You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python multiprocessing在Windows Server 2019中挂起问题求助

问题:Windows Server 2019上Python multiprocessing.Pool脚本挂起,本地Windows 10正常

简化后的测试代码:

from multiprocessing import Pool

def worker(x):
    return x * x

if __name__ == "__main__":
    with Pool(4) as p:
        result = p.map(worker, range(10))
        print(result)

环境信息:

  • Python 3.10
  • Windows Server 2019
  • 通过命令行运行(非IDE)

本地Windows 10机器可立即输出结果,但服务器上脚本会无限期挂起,求可能的原因。

可能的原因分析
  • 安全策略限制:Windows Server 2019默认安全配置更严格,比如UAC权限、组策略限制了进程创建权限,导致运行脚本的账户无法正常创建子进程,主进程一直等待子进程返回结果。
  • Python环境差异:服务器上的Python 3.10可能存在组件缺失或依赖冲突,比如multiprocessing依赖的底层win32相关模块异常,导致进程间通信(IPC)失败,子进程的结果无法传递回主进程。
  • 系统资源不足:服务器当前负载过高,或配置了CPU、内存配额限制,Pool的子进程无法分配到足够资源执行任务,导致任务卡住。
  • 输出缓冲问题:服务器命令行环境的输出缓冲机制可能导致结果未及时刷新,看起来像是挂起,实际脚本已执行完成。可添加sys.stdout.flush()强制刷新输出,或把结果写入文件验证。
  • 进程启动路径问题:Windows的spawn启动方式需要子进程重新导入主脚本,若脚本所在路径包含特殊字符、空格,或子进程无权限读取脚本文件,会导致子进程启动失败,主进程无限等待。
  • 安全软件拦截:服务器上的杀毒软件、防火墙可能拦截了Python子进程的创建或通信,导致子进程无法正常运行,主进程无法获取结果。

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

火山引擎 最新活动