You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复杂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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:50:18