初心者のための Python スレッドとマルチプロセス

Python では、同時タスクを処理することで、特に I/O バウンドまたは CPU バウンドの操作を処理する場合に、アプリケーションのパフォーマンスを大幅に向上できます。Python には、同時実行用の 2 つの主要モジュール threadingmultiprocessing が用意されています。この記事では、これらのモジュールを紹介し、同時実行プログラミングでの使用方法を説明します。

スレッドを理解する

スレッド化は、単一のプロセス内で複数のスレッド (プロセスの小さな単位) を同時に実行する方法です。これは、外部リソース (ファイル I/O、ネットワーク要求など) を待機するのに長い時間を費やす I/O バウンド タスクに役立ちます。

基本的なスレッドの例

Python でスレッドを作成および管理するには、threading モジュールを使用します。簡単な例を次に示します。

import threading

# Define a function to be run in a thread
def print_numbers():
    for i in range(5):
        print(i)

# Create a thread object
thread = threading.Thread(target=print_numbers)

# Start the thread
thread.start()

# Wait for the thread to complete
thread.join()

print("Thread has finished execution")

マルチプロセッシングを理解する

マルチプロセッシングを使用すると、それぞれ独自の Python インタープリタとメモリ空間を持つ複数のプロセスを同時に実行できます。これは、並列で計算を実行する必要がある CPU バウンド タスクに特に便利です。

基本的なマルチプロセッシングの例

multiprocessing モジュールは、個別のプロセスの作成と管理に使用されます。簡単な例を以下に示します。

import multiprocessing

# Define a function to be run in a process
def compute_square(number):
    print(f"The square of {number} is {number * number}")

# Create a process object
process = multiprocessing.Process(target=compute_square, args=(5,))

# Start the process
process.start()

# Wait for the process to complete
process.join()

print("Process has finished execution")

スレッドとマルチプロセスの比較

  • スレッド化: I/O バウンドのタスクに最適です。スレッドは同じメモリ空間を共有し、待機を伴う操作をより効率的に行うことができます。
  • マルチプロセッシング: CPU 依存のタスクに最適です。プロセスは個別のメモリ空間で実行され、計算負荷の高いタスクに複数の CPU コアを最大限に活用できます。

一般的な使用例

  • スレッド: Web スクレイピング、ファイル I/O 操作、外部リソースの待機を伴うタスクなどに適しています。
  • マルチプロセッシング: データ処理、数学的計算、または大量の CPU リソースを必要とするあらゆるタスクに最適です。

結論

threadingmultiprocessing はどちらも、Python アプリケーションのパフォーマンスと効率を向上させる強力なツールです。これらのモジュールをいつどのように使用するかを理解することで、より効果的で応答性の高いプログラムを作成できます。I/O バウンド タスクを処理する場合でも、CPU バウンド計算を処理する場合でも、Python は並行処理を効果的に処理するために必要なツールを提供します。