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

Python 3使用multiprocessing多进程运行代码出现报错如何解决

错误原因

  1. multiprocessing.Pool.map的参数使用错误:该方法的定义为map(func, iterable, chunksize=1),第三个参数是控制任务分块大小的可选整数,你将data_frame_list[item]传入第三个参数位置,程序会把这个DataFrame对象当作chunksize处理,执行chunksize <= 0判断时类型不匹配,直接触发类型错误。
  2. 原业务函数process_data需要接收两个入参,但Pool.map默认只能给目标函数传递单个参数,直接调用也无法满足参数传递需求。
  3. 额外问题:在列表推导式中循环调用Pool.map完全浪费了多进程的性能优势,相当于每次只处理一个任务,完全没必要用多进程。

解决方案

推荐使用Pool.starmap实现多参数传递,代码改造如下:

import multiprocessing

if __name__ == "__main__":
    # 提前筛选符合条件的任务参数,打包为元组列表
    task_args = [(item, data_frame_list[item]) for item in data_frame_list if data_frame_list[item].shape[0] > 5]
    # 上下文管理器自动管理进程池生命周期
    with multiprocessing.Pool() as pool_obj:
        # starmap会自动将元组拆分为多个参数传入process_data
        results = pool_obj.starmap(process_data, task_args)

补充说明

  • 代码中增加的if __name__ == "__main__"判断是Python多进程的规范写法,Windows系统下运行多进程必须加该判断,否则会出现无限启动进程的问题,Linux/macOS环境也建议添加避免异常。
  • 如果不想用starmap,也可以自行改造process_data函数,让它接收一个元组参数后内部拆包,之后用普通的Pool.map调用即可:
# 改造后的process_data示例
def process_data(task_tuple):
    item, df = task_tuple
    # 此处保留你原来的业务逻辑即可

内容的提问来源于stack exchange,提问作者usert4jju7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:48:00