首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python如何在executor.map中传递参数对列表

Python如何在executor.map中传递参数对列表
EN

Stack Overflow用户
提问于 2020-07-20 02:57:48
回答 1查看 527关注 0票数 1

我所拥有的:

代码语言:javascript
复制
ids = [1,2,3...]
dates = ['a', 'b', 'c'...]

def f(id, date):
  print(f'{id} - {date}')

我打算做的是:在多线程中运行f,其中包含所有id的组合,日期作为参数。

预期产出:

代码语言:javascript
复制
1 - a
1 - b
1 - c
2 - a
2 - b
2 - c
3 - a
3 - b
3 - c 
...

这显然不起作用

代码语言:javascript
复制
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
    executor.map(f, ids, dates)

这也不起作用,而且看上去很笨拙:首先使用循环来构建一个参数列表,如

代码语言:javascript
复制
args = [[1,a][1,b][1,c]
        [2,a],[2,b],[2,c]
        ...
       ]

并把它传给f:

代码语言:javascript
复制
    executor.map(f, args)

代码语言:javascript
复制
    executor.map(f, *args) 

要么失败

或者重新设计f所以它只需要一个论点?

一定有个好办法..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-20 03:12:33

.map()将并行地迭代所有可迭代性。它不会试图找到所有的组合:

如果传递了额外的可迭代参数,则函数必须接受这些参数,并并行地应用于来自所有可迭代项的项。

一个简单的解决方法是使用itertools.product。没有比这更好的可读性方法了:

将您的职能更改为:

代码语言:javascript
复制
def f(t):
  id, date = t
  print(f'{id} - {date}')

然后:

代码语言:javascript
复制
import itertools
...
    executor.map(f, itertools.product(ids, dates))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62987994

复制
相关文章

相似问题

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