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

Python多进程Pool.map传递多参数:列表与变量作为输入

解决多进程Pool.map传递额外参数的问题

嘿,我来帮你搞定这个多进程传参的问题~multiprocessing.Pool.map()确实只能接受单个可迭代参数的函数,没法直接像你写的p.map(func, cust, time, chunksize=1)那样传多个参数。不过有两个常用的解决方案,我给你详细讲讲:

方法1:用functools.partial绑定固定参数

如果你的time是一个固定值(所有进程共用同一个时间),可以用functools.partial把这个参数预先绑定到func上,让它变成只需要一个参数的函数,这样就能直接用map了。

示例代码:

import multiprocessing
import time
from functools import partial

def func(c, current_time):  # 这里把time改成current_time,避免和模块名冲突
    result_list = [c, current_time]  # 不要用list当变量名,这是Python内置关键字
    another_func(result_list)

if __name__ == "__main__":
    cust = ['c1', 'c2', 'c3']
    current_time = time.time()  # 比如获取当前时间
    # 用partial绑定current_time参数
    bound_func = partial(func, current_time=current_time)
    
    p = multiprocessing.Pool()
    p.map(bound_func, cust, chunksize=1)
    p.close()
    p.join()

方法2:用starmap传递多参数元组

如果每个任务需要不同的参数(或者你更习惯显式传参),可以把cust里的每个元素和time打包成元组,然后用Pool.starmap()方法,它会自动把元组里的元素拆成函数的多个参数。

示例代码:

import multiprocessing
import time

def func(c, current_time):
    result_list = [c, current_time]
    another_func(result_list)

if __name__ == "__main__":
    cust = ['c1', 'c2', 'c3']
    current_time = time.time()
    # 把每个c和current_time打包成元组
    args_list = [(c, current_time) for c in cust]
    
    p = multiprocessing.Pool()
    p.starmap(func, args_list, chunksize=1)
    p.close()
    p.join()

额外提醒:

  • 你原来的代码里有个坑:变量名time和导入的time模块重名了,这会导致后续调用time模块的方法报错,记得改成别的名字(比如current_time)。
  • 不要用list当变量名,这是Python的内置类型,会覆盖掉内置的list功能,换成result_list这类更有意义的名字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:22:42