Python Multiprocessing函数未执行,无输出且耗时异常求助
问题:Multiprocessing子进程函数未执行,无预期输出
你复制视频中的multiprocessing代码后,子进程的do_something函数未执行,仅打印了最终耗时,核心原因是Windows系统下的multiprocessing机制要求必须用if __name__ == '__main__':包裹主程序逻辑。
原因解析
Windows没有Unix系统的fork机制,Python会通过重新导入整个脚本的方式创建子进程。如果没有if __name__ == '__main__':保护,子进程启动时会再次执行整个脚本的代码,包括创建新的子进程、调用start()和join(),最终导致逻辑混乱,子进程的目标函数无法正常执行。
修正后的代码
import time import multiprocessing def do_something(): print('Sleeping 1 second....') time.sleep(1) print('Done Sleeping...') if __name__ == '__main__': start = time.perf_counter() p1 = multiprocessing.Process(target=do_something) p2 = multiprocessing.Process(target=do_something) p1.start() p2.start() p1.join() p2.join() finish = time.perf_counter() print(f'Finished in {round(finish-start, 2)} second(s)')
验证效果
运行修正后的代码,会得到预期输出:
Sleeping 1 second.... Sleeping 1 second.... Done Sleeping... Done Sleeping... Finished in 1.01 second(s)
注意事项
- 该问题仅在Windows系统下出现,Unix/Linux/macOS系统因为使用
fork机制,不需要额外的if __name__ == '__main__':保护也能正常运行。 - 所有启动子进程的逻辑都必须放在
if __name__ == '__main__':代码块内,避免子进程重复执行主程序代码。
内容的提问来源于stack exchange,提问作者Poopin Mah Business
相关产品推荐
相关产品推荐

