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

如何配置multiprocessing Pool将并行任务输出收集到字典

你的代码存在三个核心问题:

  • 进程空间相互隔离,子进程修改的slns是自身进程内存中的副本,不会同步到主进程的slns字典,所以即使运行成功也拿不到结果
  • Windows平台运行多进程代码必须添加if __name__ == '__main__'入口保护,否则会循环导入模块、重复启动子进程直接报错,类Unix系统也建议添加保证兼容性
  • starmap会收集所有子进程中函数的返回值作为结果列表,你当前的do_one_run没有定义返回值,自然拿不到任何运行结果

修正后的可运行代码如下:

import numpy as np
import multiprocessing as mp

def example_func(v1_passed, v2_passed, v3_passed):
    tmp = np.random.random((v1_passed, v2_passed, v3_passed))*100
    my_arr = tmp.astype(int)
    piece_arr = my_arr[1,:,1:3]
    return piece_arr

def do_one_run(key, v1_passed, v2_passed, v3_passed):
    results = example_func(v1_passed, v2_passed, v3_passed)
    # 直接返回结果,不要修改全局变量
    return key, [v1_passed, v2_passed, v3_passed, results]

if __name__ == '__main__':
    slns = {}
    var1 = [5, 6, 7]
    var2 = [2, 3, 4]
    var3 = [10, 9, 8]

    all_combos = []
    key = 0
    for v1 in var1:
        for v2 in var2:
            for v3 in var3:
                all_combos.append([key, v1, v2, v3])
                key += 1

    # 16核设备可以设置为mp.cpu_count()-1,预留1核给系统调度避免卡顿
    pool = mp.Pool(mp.cpu_count()-1)
    # 收集所有返回结果
    result_list = pool.starmap(do_one_run, all_combos)
    # 资源清理
    pool.close()
    pool.join()

    # 主进程统一组装结果字典
    for key, res in result_list:
        slns[key] = res

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:36:02