将多个参数传递给 concurrent.futures.Executor.map? [英] Pass multiple parameters to concurrent.futures.Executor.map?
本文介绍了将多个参数传递给 concurrent.futures.Executor.map?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
concurrent.futures.Executor.map
使用可变数量的迭代器,从中调用给定的函数.如果我有一个生成元组的生成器,我应该如何调用它?
以下不起作用,因为每个生成的元组都作为映射的不同参数给出:
The following doesn't work because each of the generated tuples is given as a different argument to map:
args = ((a, b) for (a, b) in c)
for result in executor.map(f, *args):
pass
如果没有生成器,映射所需的参数可能如下所示:
Without the generator, the desired arguments to map might look like this:
executor.map(
f,
(i[0] for i in args),
(i[1] for i in args),
...,
(i[N] for i in args),
)
推荐答案
你需要去掉map
调用上的*
:
args = ((a, b) for b in c)
for result in executor.map(f, args):
pass
这将调用 f
, len(args)
次,其中 f
应该接受一个参数.
This will call f
, len(args)
times, where f
should accept one parameter.
如果你想让 f
接受两个参数,你可以使用如下的 lambda 调用:
If you want f
to accept two parameters you can use a lambda call like:
args = ((a, b) for b in c)
for result in executor.map(lambda p: f(*p), args): # (*p) does the unpacking part
pass
这篇关于将多个参数传递给 concurrent.futures.Executor.map?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文