マルチプロセスの利用 | プロセスの作成 | Python本格超入門

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

マルチプロセスの利用

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パラメータを使って、各プロセスに引数を渡すことができます。

プロセス間の通信

プロセス間でデータをやり取りする場合、QueuePipeを使用します。以下は、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()で終了待機する基本的な操作を理解し、プロセス間でデータをやり取りする場合はQueuePipeを活用することができます。これにより、効率的な並行処理が可能になります。