Pythonの並列化をやってみる

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

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

スポンサーリンク