我有一个像这样的小玩具例子
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。
我在这里做什么错了?
答案 0 :(得分:2)
通过ex.map
,来自params
的元素将作为第一个参数传递给hello
。如果要将多个参数传递给线程函数,则有以下几种可能性:
制作两个参数列表,一个用于第一个参数,一个用于第二个参数,并将它们都作为参数传递给exp.map
:
params1 = ['test.csv', 'test2.csv']
params2 = [1, 2]
results = ex.map(hello, params1, params2)
让hello
接受一个元组参数,然后解压缩它们:
def hello(args):
filename, suffix = args
将params
列表转置并解压缩到ex.map
上(确实与1相同,但没有手动覆盖params1
和params2
):>
ex.map(hello, *zip(*params))