Pythonの並列化をやってみる

こんばんは。きわさです。

今回は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秒となり、並列化できました。

スポンサーリンク