Pythonのmultiprocessing
モジュールは、複数のプロセス(サブプロセス)を生成し、マルチプロセッサーマシンの性能を最大限に引き出すことができます。このモジュールの中にはProcess
クラスがあり、このクラスを使って並列処理(マルチプロセス)を実現することができます。
Processクラスの基本的な使い方
まずは、Process
クラスを使った基本的な並列処理のコードを見てみましょう。
from multiprocessing import Process
from time import sleep
# メインプロセスで動かす関数
def func_1(num):
print('メインプロセスStart')
for i in range(num):
print('メインプロセス:', i)
sleep(1)
print('メインプロセスEnd')
# サブプロセスで動かす関数
def func_2(num):
print('サブプロセスStart')
for i in range(num):
print('サブプロセス:', i)
sleep(0.5)
print('サブプロセスEnd')
if __name__ == '__main__':
p = Process(target=func_2, args=(10,))
p.start()
func_1(10)
このコードでは、Process
クラスを使ってサブプロセスを生成し、そのサブプロセスでfunc_2
関数を実行しています。同時に、メインプロセスではfunc_1
関数が実行されています。これにより、メインプロセスとサブプロセスが同時に実行され、並列処理が実現されています。
joinメソッドの使い方
Process
クラスのjoin
メソッドは、サブプロセスが終了するまでメインプロセスを一時的に待機させるためのメソッドです。このメソッドを使うことで、サブプロセスの処理が完全に終了した後にメインプロセスの処理を再開することができます。
以下のコードは、join
メソッドを使った例です。
if __name__ == '__main__':
p = Process(target=func_2, args=(10,))
p.start()
p.join() # サブプロセスが終了するまで待機
func_1(10)
このコードでは、p.join()
により、func_2
関数の処理が完全に終了した後にfunc_1
関数の処理が開始されます。
以上が、Pythonのmultiprocessing
モジュールとProcess
クラスのjoin
メソッドの基本的な使い方です。これらを使うことで、Pythonでの並列処理を効率的に行うことができます。