Python multiprocessing.Process不运行无输出怎么解决
问题原因
- macOS 平台从 Python 3.8 版本开始,
multiprocessing模块的默认进程启动方式改为spawn,该模式要求所有进程创建的顶层代码必须包裹在if __name__ == '__main__'判断中,否则子进程启动时会重复执行主模块的全部顶层代码,导致目标函数无法正常触发执行。 - 终端标准输出默认存在缓冲,子进程的打印内容如果没有主动刷新,会滞留在缓冲区不会输出到终端界面。
修复后的可运行代码
import multiprocessing def func(n): # 加flush=True强制刷新输出缓冲,确保内容即时打印 print('Function', n, flush=True) if __name__ == '__main__': p1 = multiprocessing.Process(target=func, args=(1, )) p2 = multiprocessing.Process(target=func, args=(2, )) p1.start() p2.start() p1.join() p2.join() print("Finished")
可选补充方案
如果按照上述修改后仍存在无输出的情况,可以在if __name__ == '__main__'块的最开头手动指定进程启动方式为fork(该方式为Python 3.7及之前版本macOS平台的默认启动方式):
if __name__ == '__main__': multiprocessing.set_start_method('fork') # 后续进程创建逻辑不变
内容的提问来源于stack exchange,提问作者Finlay
相关产品推荐
相关产品推荐

