業務でPythonを使用してProcess管理みたいなことしたい機会があったので、
とりあえず公式ドキュメントを参考に動かしてみた。
とりあえずProcessを使ってみる。
from multiprocessing import Process def f(name): print('hello', name) if __name__ == '__main__': for i in range(0, 4): p = Process(target=f, args=('Yamada' + str(i),)) p.start() p.join()
出力結果は以下の通り。
hello Yamada0 hello Yamada1 hello Yamada2 hello Yamada3
Start()メソッドはProcessを開始させるとして、
Join()メソッドはJoinメソッドを呼んだプロセスが終了するまで待機するらしい。
- Joinメソッドを実行しない場合
from multiprocessing import Process import time def f(name, i): print('start:', i) time.sleep(i) print('hello ', name) print('end:', i) if __name__ == '__main__': for i in range(1, 5): p = Process(target=f, args=('Yamada ' + str(i),i,)) p.start()
- 実行結果
start: 1 start: 2 start: 3 start: 4 hello Yamada 4 end: 4 hello Yamada 3 end: 3 hello Yamada 2 end: 2 hello Yamada 1 end: 1
- Joinメソッドを実行した場合
from multiprocessing import Process import time def f(name, i): print('start:', i) time.sleep(i) print('hello ', name) print('end:', i) if __name__ == '__main__': for i in range(1, 5): p = Process(target=f, args=('Yamada ' + str(i),i,)) p.start() p.join()
- 実行結果
start: 1 hello Yamada 1 end: 1 start: 2 hello Yamada 2 end: 2 start: 3 hello Yamada 3 end: 3 start: 4 hello Yamada 4 end: 4
Join()メソッドを実行するとプロセスの実行が終了するまで次の処理を待機してくれている。 似たようなことC#でもやってたのに忘れてるな・・・。