将多个参数传递给concurrent.futures.Executor.map? [英] Pass multiple parameters to concurrent.futures.Executor.map?

查看:2967
本文介绍了将多个参数传递给concurrent.futures.Executor.map?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

concurrent.futures.Executor。 map 采用可变数目的迭代,从中调用给定的函数。 如果我有一个生成器可以生成正常解压缩的元组,那么应该如何调用它?

每个生成的元组作为映射的不同参数给出:

The following doesn't work because the 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


b $ b

没有生成器,映射的所需参数可能如下所示:

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),
)


推荐答案

您需要删除地图上的 *

args = (a, b for b in c)
for result in executor.map(f, args):
    pass

这将调用 f len 次,其中 f 应接受一个参数。如果你想要 f 接受两个参数,你可以使用一个lambda调用,如:

This will call f, len(args) times, where f should accept one parameter. 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):
    pass

这篇关于将多个参数传递给concurrent.futures.Executor.map?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆