Python多进程运行时报错:未用fork及未遵循主模块规范如何解决?
解决Python多进程运行时错误
错误原因
在Windows系统中,Python多进程采用spawn方式启动子进程,而非Unix/Linux的fork机制。这种方式下,每个子进程都会重新导入主模块,如果没有用if __name__ == '__main__':包裹主程序逻辑,子进程会重复执行创建进程的代码,引发循环启动进程的错误,也就是你看到的提示信息。
修正后的代码
from multiprocessing import Process import os def square_num(): for i in range(100): result = i * i # 可根据需求添加实际操作,比如打印或存储计算结果 # print(f"进程 {os.getpid()}: {i} 的平方是 {result}") if __name__ == '__main__': processes = [] num_processes = os.cpu_count() for _ in range(num_processes): p = Process(target=square_num) processes.append(p) for p in processes: p.start() for p in processes: p.join() print('end main')
关键说明
- 所有启动、管理进程的代码必须放在
if __name__ == '__main__':代码块内,这样子进程导入模块时会跳过这部分逻辑,只执行目标函数square_num。 - 无需添加
freeze_support(),因为你没有把程序打包成可执行文件。 - 建议将模块导入语句放在代码顶部,避免子进程重复导入时出现不必要的问题。
内容的提问来源于stack exchange,提问作者mm melodies
相关产品推荐
相关产品推荐

