Windows 10下Python创建子进程失败:ImportError问题求助
解决Windows 10 Python 3.6.5下multiprocessing的ImportError问题
首先先把你的测试代码和报错信息整理出来,方便定位问题:
你的测试代码
from multiprocessing import Process def f(name): print ('hello', name) if __name__ == '__main__': p = Process(target=f, args=('bob',)) p.start() p.join()
报错信息
File "J:\Programs\Python\Python36\lib\multiprocessing\context.py", line 321, in _Popen from .popen_spawn_win32 import Popen
ImportError: cannot import name 'Popen'
这个报错在Windows平台的Python 3.6版本里并不少见,我整理了几个最可能的原因和对应的解决方案,你可以逐一尝试:
1. 排查模块命名冲突
这是最常见的诱因:
- 绝对不要把你的脚本文件名命名为
multiprocessing.py,否则Python会优先导入你自己的脚本,而非标准库的模块,直接导致内部导入逻辑崩溃。 - 同时检查脚本所在目录下,是否存在名为
multiprocessing的文件夹,或者popen_spawn_win32.py的独立文件,这些都会干扰标准库的正常导入流程。
如果发现有重名的文件/文件夹,修改名称后重新运行脚本即可。
2. 检查Python安装文件是否损坏
报错提示找不到popen_spawn_win32.py里的Popen类,大概率是Python安装目录下的相关文件缺失或损坏:
- 打开你的Python安装路径
J:\Programs\Python\Python36\lib\multiprocessing\,确认是否存在popen_spawn_win32.py文件,且文件内容完整无乱码。 - 如果文件缺失或内容异常,可以通过Windows控制面板的「程序和功能」找到Python 3.6.5,选择「修复」选项来修复安装;若修复无效,直接重新下载Python 3.6.5的官方安装包进行重装。
3. 避免路径中的特殊字符
旧版本Python(比如3.6)在Windows下对包含中文、空格或特殊字符的路径支持不够友好,容易引发模块导入失败:
- 把你的测试脚本移动到纯英文、无空格的路径下,比如
C:\PythonScripts\test_multiprocess.py,再运行试试。
4. 显式指定多进程启动方式
Windows下Python 3.6默认使用spawn作为多进程启动方式,你可以尝试显式指定启动方式,或者切换到forkserver:
修改代码如下:
import multiprocessing # 显式指定启动方式 multiprocessing.set_start_method('spawn') from multiprocessing import Process def f(name): print ('hello', name) if __name__ == '__main__': p = Process(target=f, args=('bob',)) p.start() p.join()
如果以上方法都无效,建议你升级Python版本到3.7及以上(Python 3.6已停止官方维护),新版本对Windows多进程的兼容性有明显提升,大概率能解决这个问题。
内容的提问来源于stack exchange,提问作者Smithy
相关产品推荐
相关产品推荐

