マルチプロセスの利用
Pythonでは、multiprocessing
モジュールを使って、複数のプロセスを同時に実行することができます。スレッドとは異なり、プロセスは独立して実行され、それぞれが独自のメモリ空間を持ちます。そのため、並行処理においてデータの競合やロックの問題が発生しにくいという利点があります。ここでは、マルチプロセスを使った基本的な並行処理の実装方法を紹介します。
プロセスの作成
Pythonのmultiprocessing.Process
を使うと、プロセスを簡単に作成できます。以下は、プロセスを作成して実行する基本的な例です。
import multiprocessing
import time
def worker():
"""プロセスで実行される関数"""
for i in range(5):
print(f"Worker: {i}")
time.sleep(1)
# プロセスの作成
process = multiprocessing.Process(target=worker)
# プロセスの開始
process.start()
# メインプロセスの処理
for i in range(5):
print(f"Main process: {i}")
time.sleep(0.5)
# プロセスの終了待ち
process.join()
このコードでは、worker
関数を別プロセスで実行しています。multiprocessing.Process
クラスにtarget
として実行する関数を指定し、start()
メソッドを呼び出してプロセスを開始します。プロセスが終了するまでメインプロセスが待機するためには、join()
メソッドを使用します。
複数プロセスの実行
複数のプロセスを同時に実行する場合、以下のようにプロセスを複数作成して実行します。
import multiprocessing
import time
def worker(num):
"""プロセスで実行される関数"""
print(f"Worker {num} started")
time.sleep(2)
print(f"Worker {num} finished")
# 複数のプロセスを作成
processes = []
for i in range(3):
process = multiprocessing.Process(target=worker, args=(i,))
processes.append(process)
process.start()
# 全プロセスの終了待ち
for process in processes:
process.join()
ここでは、3つのプロセスを作成し、それぞれがworker
関数を実行します。args
パラメータを使って、各プロセスに引数を渡すことができます。
プロセス間の通信
プロセス間でデータをやり取りする場合、Queue
やPipe
を使用します。以下は、Queue
を使ってプロセス間でデータを共有する例です。
import multiprocessing
def worker(q):
"""プロセスで実行される関数"""
q.put("Data from worker")
# Queueの作成
q = multiprocessing.Queue()
# プロセスの作成と開始
process = multiprocessing.Process(target=worker, args=(q,))
process.start()
# プロセスからのデータを取得
print(q.get())
# プロセスの終了待ち
process.join()
この例では、Queue
を使用して、プロセスからデータをメインプロセスに渡しています。put()
メソッドでデータを送信し、get()
メソッドで受信します。
まとめ
Pythonのmultiprocessing
モジュールを使うと、複数のプロセスを並行して実行できます。プロセスはそれぞれ独立したメモリ空間を持ち、スレッドとは異なり、メモリの共有を避けることで安全に並行処理を行えます。Process
クラスを使ってプロセスを作成し、start()
で開始、join()
で終了待機する基本的な操作を理解し、プロセス間でデータをやり取りする場合はQueue
やPipe
を活用することができます。これにより、効率的な並行処理が可能になります。