首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ThreadPoolExecutor的Map传递多个值

使用ThreadPoolExecutor的Map传递多个值
EN

Stack Overflow用户
提问于 2019-07-03 20:42:02
回答 2查看 1.3K关注 0票数 1

我正在尝试弄清楚如何在current.futures库中使用ThreadPoolExecutor.map()。我使用的是Python 3.6。

下面是显示的代码

代码语言:javascript
运行
复制
import concurrent.futures
def add(x,y):
    return x+y

with concurrent.futures.ThreadPoolExecutor(1) as executor:
    res = executor.map(add, *(1,2)) # Fails 

我的问题是,当我传递参数时,我得到以下错误:

代码语言:javascript
运行
复制
builtins.TypeError: zip argument #1 must support iteration

Python文档上的示例仅显示了使用一个变量作为输入,但我希望为map函数使用N个变量。我该怎么做呢?

在这个问题上,我真的很困惑,如果有人能告诉我如何格式化我的输入参数,我将不胜感激。

我希望能够这样做:

代码语言:javascript
运行
复制
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) 

请告诉我如何格式化参数输入。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-03 20:50:10

您可以使用lambda来完成此操作,如下所示:

代码语言:javascript
运行
复制
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)   
票数 2
EN

Stack Overflow用户

发布于 2019-07-03 20:48:17

您需要创建一个接受单个参数(一个元组)的包装器函数,并使用*将其传递给您的add函数。

注意:您还希望迭代结果以实际访问它们:

代码语言:javascript
运行
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56870423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档