复杂DataFrame并行创建报错排查与解决请求
问题排查与解决:multiprocessing RuntimeError
错误原因
在Windows系统中,multiprocessing默认使用spawn方式启动子进程,而非类Unix系统的fork。如果主模块没有用if __name__ == '__main__':包裹核心执行代码,子进程启动时会重新导入整个主模块,导致重复初始化Pool,触发启动新进程的冲突,从而抛出该RuntimeError。
另外你的代码里还有个小bug:计时输出时用了未定义的变量now,应该是start。
修正后的代码
import pandas as pd import random import time from multiprocessing import Pool def new_df(rows=10000): # proxy for complex dataframe temp = pd.DataFrame({'a': [''.join(chr(random.randint(65,122)) for _ in range(200)) for _ in range(rows)]}) temp['b'] = temp['a'].str.lower() temp['c'] = temp['a'].str.upper() return temp if __name__ == '__main__': pool = Pool(4) start = time.time() out = pool.map(new_df, [9999,10000,10001,10002]) print(f"{time.time() - start} sec") # 可选:验证结果列表 print(f"共生成{len(out)}个DataFrame") print(f"第一个DataFrame行数:{len(out[0])}")
关键说明
if __name__ == '__main__':是Windows下使用multiprocessing的强制规范,它能确保子进程不会重复执行主模块的核心逻辑,只加载函数定义等静态代码- 修正了变量名错误,将
now改为start,保证计时功能正常 - 若不需要将程序打包成可执行文件,无需添加
freeze_support()
内容的提问来源于stack exchange,提问作者aeiou
相关产品推荐
相关产品推荐

