並行処理と並列処理
https://qiita.com/ogihara/items/1b7f002b7d14a2710bce
並列処理: 1つのCPUに対して、手が空いている時に他の仕事をさせること
並行処理: 複数のCPUが同時進行で仕事をできるようにすること
今回は並行処理(multi processing)がしたい。
並行処理をしてみる
http://iatlex.com/python/parallel_first#multiprocessing
すごく丁寧に解説してくれているので、なぞりながら勉強。
まずはCPUの数を調べる。2個でした。
import multiprocessing
multiprocessing.cpu_count()
次に載せてくださった例をそのまま動かしてみる。
(↓これって並列じゃなくて並行ではないのかな・・?)
######## 並列計算を使えるように #########
from multiprocessing import Pool
##### 並列計算させる関数(処理):引数1つ ###
##### この場合は,引数の二乗を返す関数 ###
def nijou(x):
print( x*x )
###### 並列計算させてみる #########
if __name__ == "__main__":
p = Pool(2)
p.map( nijou, range(10) )#nijouに0,1,..のそれぞれを与えて並列演算
結果
0
1
4
16
9
25
64
36
81
49
とりあえず動いている。
これ本当にCPU2つ使ってるのかわからないので、数を増やしてCPU利用率を見てみる。
今まで50%までしか使っていなかったのに100%近くなってる!
ついでに、os.getpid()でプロセスIDが取得できたので、つけてみた。
1 process id: 226633
1251 process id: 226634
1252 process id: 226634
1253 process id: 226634
2 process id: 226633
1254 process id: 226634
1255 process id: 226634
3 process id: 226633
...
プロセスは分かれてそうです。ただ、調べてみると1つのCPUで複数のプロセスが実行できるそうなので、あまり参考にならず・・・。
プロセスとかスレッドとか調べてみましたが深入りしてしまい終わらなさそうなので、
並列処理の勉強はここで一旦終了です。