初心者のための Python スレッドとマルチプロセス
Python では、同時タスクを処理することで、特に I/O バウンドまたは CPU バウンドの操作を処理する場合に、アプリケーションのパフォーマンスを大幅に向上できます。Python には、同時実行用の 2 つの主要モジュール threading
と multiprocessing
が用意されています。この記事では、これらのモジュールを紹介し、同時実行プログラミングでの使用方法を説明します。
スレッドを理解する
スレッド化は、単一のプロセス内で複数のスレッド (プロセスの小さな単位) を同時に実行する方法です。これは、外部リソース (ファイル 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 リソースを必要とするあらゆるタスクに最適です。
結論
threading
と multiprocessing
はどちらも、Python アプリケーションのパフォーマンスと効率を向上させる強力なツールです。これらのモジュールをいつどのように使用するかを理解することで、より効果的で応答性の高いプログラムを作成できます。I/O バウンド タスクを処理する場合でも、CPU バウンド計算を処理する場合でも、Python は並行処理を効果的に処理するために必要なツールを提供します。