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

如何让multiprocessing.Pool().starmap()返回传入的可迭代参数

解决方法

不需要修改原函数的返回值,你可以通过以下方式关联输入参数和函数结果:

1. 提前保存参数列表(内存充足时首选)

先把所有要传入的(i,j)参数对保存成一个列表,之后将这个列表和starmap返回的结果一一配对:

import multiprocessing as mp
import pandas as pd

# 生成所有参数对列表
params = [(i, j) for j in range(y) for i in range(x)]

with mp.Pool() as pool:
    # 传入参数列表并执行函数
    results = pool.starmap(func, params)

# 将参数和结果合并成DataFrame所需的格式
data = [(i, j, res) for (i, j), res in zip(params, results)]
df = pd.DataFrame(data, columns=["i", "j", "k"])

starmap会严格按照传入的可迭代对象的顺序返回结果,因此参数列表和结果列表的索引完全对应,直接zip即可正确配对。

2. 用生成器复制避免内存占用(数据量极大时)

如果x和y过大,生成参数列表会占用过多内存,可以用itertools.tee复制参数生成器,一个给starmap使用,另一个用来和结果配对:

import multiprocessing as mp
import pandas as pd
from itertools import tee

# 创建参数生成器
param_gen = ((i, j) for j in range(y) for i in range(x))
# 复制生成器,两个生成器会独立迭代
param_gen_for_pool, param_gen_for_pairing = tee(param_gen)

with mp.Pool() as pool:
    results = pool.starmap(func, param_gen_for_pool)

# 配对参数和结果
data = [(i, j, res) for (i, j), res in zip(param_gen_for_pairing, results)]
df = pd.DataFrame(data, columns=["i", "j", "k"])

这种方式不会一次性把所有参数加载到内存,适合处理超大规模的循环任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:35:22