并发.futures 出错说参数缺少 1 个必需的位置参数

jho*_*ith 1 python

我有一个像这样的小玩具示例

def hello(filename,suffix):                     
    print(filename + str(suffix))               


params = [('test.csv', 1), ('test2.csv', 2)]
ex = futures.ThreadPoolExecutor(max_workers=2)  

results = ex.map(hello, params)                 

real_results = list(results)
Run Code Online (Sandbox Code Playgroud)

当我执行这段代码时,我收到一条错误消息

类型错误:hello() 缺少 1 个必需的位置参数:“后缀”

好吧,我认为第一个线程中的后缀是 1,第二个线程中的后缀是 2。

我在这里做错了什么?

小智 5

通过ex.map,来自的元素params将作为第一个参数传递给hello。如果您想将多个参数传递给线程函数,有几种可能性:

  1. 创建两个参数列表,一个用于第一个参数,一个用于第二个参数,并将它们都作为参数传递给exp.map:

    params1 = ['test.csv', 'test2.csv']
    params2 = [1, 2]
    results = ex.map(hello, params1, params2)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 让hello我们采用一个参数元组,然后将它们解压:

    def hello(args):
        filename, suffix = args
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将列表转置并解压params到ex.map(实际上这与 1. 相同,无需手动转换为params1和params2):

    ex.map(hello, *zip(*params))
    
    Run Code Online (Sandbox Code Playgroud)