parallel.futures错误,指出参数缺少1个必需的位置参数

时间:2018-11-06 14:36:00

标签: 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)

当我执行这段代码时,我得到一个错误提示

TypeError:hello()缺少1个必需的位置参数:“后缀”

我认为后缀在第一个线程中为1,在第二个线程中为2。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

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

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

    params1 = ['test.csv', 'test2.csv']
    params2 = [1, 2]
    results = ex.map(hello, params1, params2)
    
  2. hello接受一个元组参数,然后解压缩它们:

    def hello(args):
        filename, suffix = args
    
  3. params列表转置并解压缩到ex.map上(确实与1相同,但没有手动覆盖params1params2):

    ex.map(hello, *zip(*params))