並列化
段々と解析の処理時間も長くなってきたため、並列化を検討することにした。
並列化の当たり前は省く。
Python並列化
Pythonの場合、並列化処理は3つ方法がある。
- async
- threagding
- multiprocessing
である。簡単に違いをまとめると
| スレッド数 | プロセス数 | CPUコア数 | 区分 | |
|---|---|---|---|---|
| async | 1 | 1 | 1 | 非同期処理 |
| threading | N | 1 | 1 | 並行処理 |
| multiprocessing | 1(1コアあたり) | N | N | 並列処理 |
今回はmultiprocessingを使う。
まず型は以下の通りである。
import time
from multiprocessing import Pool
# 並列処理させる関数
def nijou(x):
print('input: %d' % x)
time.sleep(2)
retValue = x * x
print('double: %d' % (retValue))
return(retValue)
if __name__ == "__main__":
p = Pool(4) # プロセス数を4に設定
result = p.map(nijou, range(10)) # nijou()に0,1,..,9を与えて並列演算
print(result)