我有一个像这样的小玩具示例
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。如果您想将多个参数传递给线程函数,有几种可能性:
创建两个参数列表,一个用于第一个参数,一个用于第二个参数,并将它们都作为参数传递给exp.map:
params1 = ['test.csv', 'test2.csv']
params2 = [1, 2]
results = ex.map(hello, params1, params2)
Run Code Online (Sandbox Code Playgroud)让hello我们采用一个参数元组,然后将它们解压:
def hello(args):
filename, suffix = args
Run Code Online (Sandbox Code Playgroud)将列表转置并解压params到ex.map(实际上这与 1. 相同,无需手动转换为params1和params2):
ex.map(hello, *zip(*params))
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |