こんばんは。きわさです。
今回はpythonの並列化についてです。
例えば、下記のコードです。
import time def func(n): time.sleep(3) print(n) return n start = time.perf_counter() for i in range(10): func(i) print(time.perf_counter() - start)
funcでは3秒待機しています。
それを10回呼び出しているので、処理時間は30秒程度かかります。
それを並列化してみます。
from concurrent.futures import ThreadPoolExecutor start = time.perf_counter() with ThreadPoolExecutor(max_workers=10) as executor: results=executor.map(func, range(10)) print(list(results)) print(time.perf_counter() - start)
まず、ThreadPoolExecutorです。
引数に、スレッドの最大数を指定してインスタンスを生成します。
その後map関数で、実行する関数と、その引数を配列で渡しています。
戻り値は、実行結果を取得するためのgeneratorです。
list(results)によってすべての実行を待ち、結果を取得しています。
この場合の処理時間は3秒となり、並列化できました。