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




