こんばんは。きわさです。
今回はpythonの並列化についてです。
例えば、下記のコードです。
1 2 3 4 5 6 7 8 9 10 11 12 | 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秒程度かかります。
それを並列化してみます。
1 2 3 4 5 6 7 8 | 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秒となり、並列化できました。