{category}

Python - マルチプロセス

multiprocessing.Process

マルチプロセッシング プロセス(標準ライブラリ

意味 並列処理で作業員を作る


multiprocessing.Processとは?

multiprocessing.Processは、Pythonで複数の処理を同時に実行するための機能であるマルチプロセス処理において、独立した作業単位であるプロセスを作成するためのクラスです。 CPUの力を最大限に活かしてプログラムを高速化したい場合に、このmultiprocessing.Processを使って複数の作業を並列で実行させることができます。

multiprocessing.Processの具体的な使い方

複数のプロセスを使用した並列処理

import multiprocessing
import time
import os

def worker(name, duration):
    print(f'プロセス {name} (PID: {os.getpid()}) が開始されました')
    time.sleep(duration)
    print(f'プロセス {name} (PID: {os.getpid()}) が終了しました')

def main():
    processes = [
        multiprocessing.Process(target=worker, args=(f'worker {i}', i)) 
        for i in range(3)
    ]

    print(f'メインプロセス (PID: {os.getpid()}) が開始されました')

    for p in processes:
        p.start()

    for p in processes:
        p.join()

    print('すべてのプロセスが終了しました')

if __name__ == '__main__':
    main()

👇出力結果

メインプロセス (PID: 12345) が開始されました
プロセス worker 0 (PID: 12346) が開始されました
プロセス worker 1 (PID: 12347) が開始されました
プロセス worker 2 (PID: 12348) が開始されました
プロセス worker 0 (PID: 12346) が終了しました
プロセス worker 1 (PID: 12347) が終了しました
プロセス worker 2 (PID: 12348) が終了しました
すべてのプロセスが終了しました

このコードでは、multiprocessing.Processを使用して複数の独立したプロセスを作成し、並列処理を実現しています。各ワーカープロセスは、指定された時間だけスリープした後に終了します。メインプロセスは全てのワーカープロセスが終了するまで待機します。このコードは、異なる処理時間を持つタスクを並列で実行する方法を示しており、各プロセスの開始と終了時にPID(プロセスID)を表示することで、実際に別々のプロセスとして実行されていることを確認できます。

multiprocessing.Processに関するよくある質問

Q. Processとは何ですか?
A. Processは、Pythonのmultiprocessingモジュールで提供されるクラスで、独立したプロセスを作成するために使用します。各Processは別々のPythonインタプリタで実行され、独自のメモリ空間を持ちます。これにより、真の並列処理が可能になります。
Q. ThreadとProcessの違いは?
A. ThreadとProcessの主な違いは、メモリ共有と並列性にあります。Threadは同じプロセス内で実行され、メモリを共有しますが、Pythonの場合、GIL(Global Interpreter Lock)により真の並列処理ができません。一方、Processは別々のメモリ空間で実行され、GILの制限を受けないため、マルチコアCPUで真の並列処理が可能です。
Q. Processの開始と終了方法は?
A. Processの開始はstart()メソッドを呼び出すことで行います。終了を待つにはjoin()メソッドを使用します。また、is_alive()メソッドでプロセスが実行中かどうかを確認できます。プロセスを強制終了する場合はterminate()メソッドを使用しますが、リソースの適切な解放ができない可能性があるため注意が必要です。
Q. プロセス間でデータを共有するには?
A. プロセス間でデータを共有するには、multiprocessingモジュールが提供する特別な共有オブジェクトを使用する必要があります。主な方法としては、Value(単一の値)やArray(配列)を使用する方法、Queue(キュー)を使用してデータを受け渡しする方法、Manager(マネージャ)を使用して複雑なデータ構造を共有する方法などがあります。

multiprocessing.Processが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Pythonのmultiprocessing.Processやthreading.Lock、itertools、os、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


Pythonを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!Pythonはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

threading.Lock

並列処理の排他制御

種類: マルチスレッド

itertools

繰り返し処理を便利にする

種類: その他

os

オペレーティングシステムとやり取り

種類: システム関連

keys

辞書のキー一覧

種類: 辞書操作

reverse

リストを反転

種類: リスト操作