Pythonは、その豊富なライブラリと直感的な文法により、多くの開発者に愛されています。特に、Pythonのmultiprocessing
モジュールは、マルチプロセッサの利点を最大限に引き出すための強力なツールです。
マルチプロセスの基本
Pythonのmultiprocessing
モジュールを使用すると、複数のプロセスを生成し、それぞれのプロセスで異なるタスクを並行して実行することができます。以下に、3つのプロセスを生成し、それぞれのプロセスで0から4までの数値を表示する基本的なコードを示します。
from multiprocessing import Process
import time
def process1():
for i in range(5):
time.sleep(0.5)
print("process1:" + str(i))
def process2():
for i in range(5):
time.sleep(0.7)
print("process2:" + str(i))
def process3():
for i in range(5):
time.sleep(0.9)
print("process3:" + str(i))
if __name__ == '__main__':
process1 = Process(target=process1, args=())
process2 = Process(target=process2, args=())
process3 = Process(target=process3, args=())
process1.start()
process2.start()
process3.start()
process1.join()
process2.join()
process3.join()
print("process ended")
共有メモリの利用
プロセス間でデータを共有するためには、共有メモリを使用する必要があります。multiprocessing
モジュールでは、Value
クラスとArray
クラスが提供されており、これらを使用することで、プロセス間でデータを共有することができます。
以下に、3つのプロセスが共有メモリ上の変数を操作する例を示します。
import time
from multiprocessing import Value, Array, Process
def process1(count, array):
for i in range(5):
time.sleep(0.5)
count.value += 1
array[count.value - 1] = count.value
print("process1:" + str(count.value))
def process2(count, array):
for i in range(5):
time.sleep(0.7)
count.value += 1
array[count.value - 1] = count.value
print("process2:" + str(count.value))
def process3(count, array):
for i in range(5):
time.sleep(0.9)
count.value += 1
array[count.value - 1] = count.value
print("process3:" + str(count.value))
if __name__ == '__main__':
count = Value('i', 0)
array = Array('i', 15)
process1 = Process(target=process1, args=[count, array])
process2 = Process(target=process2, args=[count, array])
process3 = Process(target=process3, args=[count, array])
process1.start()
process2.start()
process3.start()
process1.join()
process2.join()
process3.join()
print(array[:])
print("process ended")
以上のように、Pythonのmultiprocessing
モジュールを使用することで、並列処理と共有メモリの管理を効果的に行うことができます。これにより、Pythonでの高性能なプログラミングが可能になります。.