Python multiprocessing自定义Manager运行到manager.start()卡住问题求助
自定义multiprocessing管理器运行卡住问题解决方案
问题原因
- IDE交互式运行环境限制:Spyder默认使用IPython内核、PyCharm默认的交互式控制台都不兼容Python多进程的spawn启动模式。Windows系统下multiprocessing默认采用spawn方式创建子进程,要求主模块可被安全重导入,交互式环境的主模块不是独立可导入的脚本文件,导致子进程启动失败卡死。
- 语法兼容问题:你提供的示例是Python2语法,若在Python3环境下直接运行,print语句不符合语法规范,也可能引发运行异常。
- Windows系统多进程启动缺失必要配置:Windows下运行多进程脚本未加
freeze_support()配置,也会导致启动异常。
解决方案
- 调整运行方式:将代码保存为独立的
.py文件,优先通过系统命令行执行python 文件名.py,如果要在IDE内运行,PyCharm选择普通Run模式而非在Python Console中执行;Spyder关闭「Run in IPython console」选项后再运行。 - 适配Python3语法:将原代码中的Python2式print语句改为Python3的函数调用格式。
- 补充Windows多进程兼容配置:在
if __name__ == '__main__'块开头添加multiprocessing.freeze_support()调用。
修正后可运行代码
import multiprocessing from multiprocessing.managers import BaseManager class MathsClass(object): def add(self, x, y): return x + y def mul(self, x, y): return x * y class MyManager(BaseManager): pass MyManager.register('Maths', MathsClass) if __name__ == '__main__': # 补充Windows多进程兼容配置 multiprocessing.freeze_support() manager = MyManager() manager.start() maths = manager.Maths() # 改为Python3 print语法 print(maths.add(4, 3)) # prints 7 print(maths.mul(7, 8)) # prints 56
内容的提问来源于stack exchange,提问作者zezo
相关产品推荐
相关产品推荐

