この記事では、Pythonでマルチプロセスを用いてCPUコアを効率的に利用する方法を詳しく解説します。具体的なコード例とその解説、応用例を含めています。
マルチプロセスとは
マルチプロセスとは、複数のプロセスを同時に動かすことで、計算処理を効率的に行う手法です。特にCPUコアが複数ある場合、各コアにプロセスを割り当てることで、高速に計算処理を行うことが可能です。
マルチスレッドとの違い
マルチスレッドは、1つのプロセス内で複数のスレッドを動かす手法です。マルチプロセスと比較すると、リソースの共有が容易ですが、PythonではGlobal Interpreter Lock(GIL)の影響を受けるため、真の並行処理が難しい場合があります。
Pythonでのマルチプロセスの基本
Pythonの標準ライブラリである`multiprocessing`を用いて、簡単にマルチプロセスのプログラミングができます。
基本的なコード構造
以下は、`multiprocessing`を用いた簡単な例です。
from multiprocessing import Process
def my_function(number):
print(f'Process {number}')
if __name__ == '__main__':
processes = []
for i in range(5):
# プロセスの作成
p = Process(target=my_function, args=(i,))
# プロセスの開始
p.start()
processes.append(p)
for p in processes:
# プロセスの終了を待つ
p.join()
コードの詳細解説
– `from multiprocessing import Process`: `multiprocessing`モジュールから`Process`クラスをインポートします。
– `def my_function(number)`: 実行させたい関数を定義します。
– `if __name__ == ‘__main__’:` : スクリプトが直接実行された場合のみ、マルチプロセスを実行します。
– `p = Process(target=my_function, args=(i,))`: `Process`クラスのインスタンスを生成し、ターゲットとなる関数と引数を設定します。
– `p.start()`: プロセスを開始します。
– `p.join()`: プロセスが終了するのを待ちます。
応用例
データの分割処理
大量のデータを分割して、各プロセスで処理する例です。
from multiprocessing import Process
def process_data(start, end, data):
for i in range(start, end):
data[i] = data[i] * 2
if __name__ == '__main__':
data = list(range(100))
chunk_size = len(data) // 4
processes = []
for i in range(4):
start_index = i * chunk_size
end_index = (i + 1) * chunk_size
p = Process(target=process_data, args=(start_index, end_index, data))
p.start()
processes.append(p)
for p in processes:
p.join()
print(data)
非同期タスク
非同期に複数のAPIリクエストを送る例です。
from multiprocessing import Process
import requests
def fetch_data(api_url):
response = requests.get(api_url)
print(response.json())
if __name__ == '__main__':
api_urls = ['https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/2']
processes = []
for url in api_urls:
p = Process(target=fetch_data, args=(url,))
p.start()
processes.append(p)
for p in processes:
p.join()
まとめ
Pythonでマルチプロセスを用いることで、CPUコアを効率的に活用し、高速な処理が可能です。基本的な使い方から応用例まで解説しましたので、この知識を活用して、より効率的なプログラムを作成してください。
コメント