我正在尝试弄清楚如何在current.futures库中使用ThreadPoolExecutor.map()。我使用的是Python 3.6。
下面是显示的代码
import concurrent.futures
def add(x,y):
return x+y
with concurrent.futures.ThreadPoolExecutor(1) as executor:
res = executor.map(add, *(1,2)) # Fails 我的问题是,当我传递参数时,我得到以下错误:
builtins.TypeError: zip argument #1 must support iterationPython文档上的示例仅显示了使用一个变量作为输入,但我希望为map函数使用N个变量。我该怎么做呢?
在这个问题上,我真的很困惑,如果有人能告诉我如何格式化我的输入参数,我将不胜感激。
我希望能够这样做:
import concurrent.futures
def add(x,y):
return x+y
numbers = [
(1,2), (2,3), (3,10)
]
with concurrent.futures.ThreadPoolExecutor(1) as executor:
res = executor.map(add, *numbers) 请告诉我如何格式化参数输入。
发布于 2019-07-03 20:50:10
您可以使用lambda来完成此操作,如下所示:
import concurrent.futures
def add(x,y):
return x+y
numbers = [(1,2), (2,3), (3,10)]
with concurrent.futures.ThreadPoolExecutor(1) as executor:
res = executor.map(lambda args : add(*args), numbers) 发布于 2019-07-03 20:48:17
您需要创建一个接受单个参数(一个元组)的包装器函数,并使用*将其传递给您的add函数。
注意:您还希望迭代结果以实际访问它们:
import concurrent.futures
def add(x, y):
return x + y
numbers = [
(1, 2), (2, 3), (3, 10)
]
res = []
with concurrent.futures.ThreadPoolExecutor(1) as executor:
for r in executor.map(lambda t: add(*t), numbers):
res.append(r)
print(res)https://stackoverflow.com/questions/56870423
复制相似问题