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

Python并行操作如何将输出收集到单个列表?报错问题问询

问题分析与解决方案

错误原因

  1. AttributeError 与内核无响应
    Jupyter Notebook的主模块加载逻辑和普通Python脚本不同,multiprocessing.Pool创建的子进程无法从__main__模块中找到tenfold函数,触发属性找不到的错误。同时你误用了p.map:该方法要求目标函数只能接收单个参数,但tenfold需要两个参数,这种参数不匹配会进一步导致子进程启动失败,最终引发内核挂起无响应。

  2. 列表输出无法累积
    Python多进程之间是内存隔离的,你传递给子进程的out_list是主进程列表的副本,子进程中对output_list的append操作仅会修改副本,不会同步到主进程的原列表,所以即使没有报错,主进程的out_list也不会有任何内容。

可行的实现方式

方法1:子进程返回结果,主进程收集(推荐)

这种方式无需共享内存,直接利用进程池的返回值收集结果,逻辑简单且可靠:

from multiprocessing import Pool
import os

def tenfold(input_value):
    output_value = input_value * 10
    print(input_value, output_value)
    return output_value

def main():
    cores = os.cpu_count()
    workers = min(30, cores)  # 避免创建超过CPU核心数的进程,减少调度开销
    print('n cores: ', cores, ', n workers: ', workers)
    inputs = range(0,5)
    with Pool(workers) as p:
        global out_list
        out_list = p.map(tenfold, inputs)

if __name__ == '__main__':
    out_list = []
    main()
    print(out_list)  # 输出: [0, 10, 20, 30, 40]

方法2:使用跨进程共享列表

如果必须在子进程中直接修改共享列表,可以用multiprocessing.Manager创建支持跨进程访问的列表:

from multiprocessing import Pool, Manager
import os

def tenfold(input_value, output_list):
    output_value = input_value * 10
    print(input_value, output_value)
    output_list.append(output_value)

def main():
    cores = os.cpu_count()
    workers = min(30, cores)
    print('n cores: ', cores, ', n workers: ', workers)
    
    # 创建跨进程共享的列表对象
    with Manager() as manager:
        out_list = manager.list()
        tups = [(i, out_list) for i in range(0,5)]
        with Pool(workers) as p:
            # 用starmap传递多参数元组
            p.starmap(tenfold, tups)
        # 将共享列表转为普通列表
        global final_out_list
        final_out_list = list(out_list)

if __name__ == '__main__':
    final_out_list = []
    main()
    print(final_out_list)  # 输出: [0, 10, 20, 30, 40]

注意事项

  • 在Jupyter环境中使用多进程,优先选择返回值收集结果的方式,比共享内存更稳定。
  • 工作进程数不要超过CPU核心数,否则会增加进程调度开销,反而降低执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:53:21