1. ホーム
  2. python

[解決済み] concurrent.futures.Executor.map に複数のパラメータを渡すか?

2023-07-19 19:43:22

質問

その concurrent.futures.Executor.map は与えられた関数が呼び出される反復記号を可変個取ります。 通常その場で解凍されるタプルを生成するジェネレータがある場合、どのように呼び出すべきでしょうか?

生成されたタプルはそれぞれ別の引数としてmapに渡されるため、以下はうまくいきません。

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

ジェネレータがなければ、mapへの望ましい引数は次のようになります。

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 は1つのパラメータを受け入れる必要があります。

もしあなたが f が2つのパラメータを受け取るようにするには、次のようなラムダ呼び出しを使用します。

args = ((a, b) for b in c)
for result in executor.map(lambda p: f(*p), args):   # (*p) does the unpacking part
    pass