私が書いたいくつかのコードに非常に混乱していました。私は次のことを発見して驚いた:
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(f, iterable))
と
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
results = list(map(lambda x: executor.submit(f, x), iterable))
さまざまな結果を生み出します。最初のものは、f
返される型のリストを生成し、2 番目のものは、返された値を取得するためにメソッドでconcurrent.futures.Future
評価する必要があるオブジェクトのリストを生成します。result()
f
私の主な懸念は、これは が をexecutor.map
利用できないことを意味するということです。これconcurrent.futures.as_completed
は、利用可能になったときに実行しているデータベースへの長時間の呼び出しの結果を評価する非常に便利な方法のように思えます。
オブジェクトがどのように機能するかについてはまったく明確ではありませんconcurrent.futures.ThreadPoolExecutor
-単純に、(やや冗長)を好むでしょう:
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
result_futures = list(map(lambda x: executor.submit(f, x), iterable))
results = [f.result() for f in futures.as_completed(result_futures)]
executor.map
パフォーマンスが向上する可能性を利用するために、より簡潔にします。そうするのは間違っていますか?