使用 ThreadPoolExecutor 的 Map 传递多个值
Using ThreadPoolExecutor's Map Passing Multiple Values
我想知道如何使用 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 iteration
Python 文档中的示例仅显示使用一个变量作为输入,但我想为 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)
请告诉我如何格式化参数输入。
您需要创建一个包装函数,它接受一个参数(一个元组)并使用 *
将其传递给您的 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)
您可以使用 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)
我想知道如何使用 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 iteration
Python 文档中的示例仅显示使用一个变量作为输入,但我想为 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)
请告诉我如何格式化参数输入。
您需要创建一个包装函数,它接受一个参数(一个元组)并使用 *
将其传递给您的 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)
您可以使用 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)