我所拥有的:
ids = [1,2,3...]
dates = ['a', 'b', 'c'...]
def f(id, date):
print(f'{id} - {date}')我打算做的是:在多线程中运行f,其中包含所有id的组合,日期作为参数。
预期产出:
1 - a
1 - b
1 - c
2 - a
2 - b
2 - c
3 - a
3 - b
3 - c
...这显然不起作用
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
executor.map(f, ids, dates)这也不起作用,而且看上去很笨拙:首先使用循环来构建一个参数列表,如
args = [[1,a][1,b][1,c]
[2,a],[2,b],[2,c]
...
]并把它传给f:
executor.map(f, args)或
executor.map(f, *args) 要么失败
或者重新设计f所以它只需要一个论点?
一定有个好办法..。
发布于 2020-07-20 03:12:33
.map()将并行地迭代所有可迭代性。它不会试图找到所有的组合:
如果传递了额外的可迭代参数,则函数必须接受这些参数,并并行地应用于来自所有可迭代项的项。
一个简单的解决方法是使用itertools.product。没有比这更好的和可读性方法了:
将您的职能更改为:
def f(t):
id, date = t
print(f'{id} - {date}')然后:
import itertools
...
executor.map(f, itertools.product(ids, dates))https://stackoverflow.com/questions/62987994
复制相似问题