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

如何向concurrent.futures.Executor.map传递常量列表参数?

解决方案

方法1:使用functools.partial绑定常量参数

通过partial把常量列表b预先绑定到函数f的第二个参数上,让executor.map只需遍历传递a中的单个元素即可。

from concurrent.futures import ThreadPoolExecutor
from functools import partial

def f(x, constant_list):
    # 这里编写你的函数逻辑,示例返回x和常量列表的组合
    return (x, constant_list)

a = [1,2,3]
b = ["constant", "values"]

# 固定第二个参数为b
bound_f = partial(f, constant_list=b)

with ThreadPoolExecutor() as executor:
    results = executor.map(bound_f, a)

# 处理返回结果
for res in results:
    print(res)

方法2:用itertools.repeat重复传递常量

借助itertools.repeat让常量列表b被重复传递,次数与a的元素个数一致,保证executor.map每次调用f时,第二个参数都是完整的b。

from concurrent.futures import ThreadPoolExecutor
import itertools

def f(x, constant_list):
    return (x, constant_list)

a = [1,2,3]
b = ["constant", "values"]

with ThreadPoolExecutor() as executor:
    # repeat(b)生成的迭代器会自动匹配a的长度
    results = executor.map(f, a, itertools.repeat(b))

for res in results:
    print(res)

方法3:用multiprocessing模块实现

如果使用multiprocessing,可以通过以下两种方式实现需求:

方式A:结合partial和Pool.map

from multiprocessing import Pool
from functools import partial

def f(x, constant_list):
    return (x, constant_list)

a = [1,2,3]
b = ["constant", "values"]

bound_f = partial(f, constant_list=b)

if __name__ == "__main__":
    with Pool() as pool:
        results = pool.map(bound_f, a)
    
    for res in results:
        print(res)

方式B:用Pool.starmap传递元组参数

from multiprocessing import Pool

def f(x, constant_list):
    return (x, constant_list)

a = [1,2,3]
b = ["constant", "values"]

if __name__ == "__main__":
    # 生成每个元素为(x, b)的迭代器
    args_iter = ((x, b) for x in a)
    with Pool() as pool:
        results = pool.starmap(f, args_iter)
    
    for res in results:
        print(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:35:09