Pythonでのマルチスレッドとマルチプロセスのリソース消費とパフォーマンス測定について解説します。Pythonの`threading`と`multiprocessing`モジュールを使用して、それぞれの処理の特性を調査する実験方法と結果、さらにそれに対する応用例を含めます。
はじめに
Pythonでプログラムを書く際、並行処理を行いたいケースは多くあります。マルチスレッドとマルチプロセスはその主要な手法ですが、それぞれどのようなリソースを消費するのか、また、どれだけのパフォーマンスが出るのかはよく誤解されるテーマです。
目的
この記事では、Pythonでのマルチスレッドとマルチプロセスのリソース消費とパフォーマンスを計測し、それぞれの適用場面について考察します。
基本的な概念
マルチスレッドとマルチプロセスの基本的な概念を確認します。
マルチスレッドとは
マルチスレッドは、1つのプロセス内で複数のスレッドを並行して動作させる技術です。
マルチプロセスとは
マルチプロセスは、複数のプロセスを並行して動作させる技術です。
実験方法
`threading`と`multiprocessing`モジュールを用いた実験を行います。
環境設定
– Python 3.9
– CPU: Intel Core i7
– RAM: 16GB
コード
以下は基本的なコードの例です。
from threading import Thread
from multiprocessing import Process
import time
def foo():
print("Starting...")
time.sleep(2)
print("Finished!")
# マルチスレッド
thread = Thread(target=foo)
thread.start()
thread.join()
# マルチプロセス
process = Process(target=foo)
process.start()
process.join()
パフォーマンス計測
パフォーマンスは`time`モジュールを用いて計測します。
実験結果と解説
マルチスレッドとマルチプロセスでの実験結果を以下に示します。
リソース消費
– マルチスレッドはメモリ消費が少ない
– マルチプロセスはCPU利用率が高い
パフォーマンス
– マルチスレッドはI/Oバウンドタスクに有用
– マルチプロセスはCPUバウンドタスクに有用
応用例
応用例として以下の2つを紹介します。
Webスクレイピング
マルチスレッドを活用することで、高速にWebページのデータを取得することができます。
from threading import Thread
import requests
def fetch(url):
response = requests.get(url)
print(f"Fetched content from {url}")
threads = []
for url in ["https://example.com", "https://example.org"]:
thread = Thread(target=fetch, args=(url,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
数値計算
マルチプロセスを活用することで、高速に数値計算が可能です。
from multiprocessing import Process
import numpy as np
def calculate(arr):
print(np.sum(arr ** 2))
processes = []
for i in range(2):
arr = np.random.rand(1000000)
process = Process(target=calculate, args=(arr,))
process.start()
processes.append(process)
for process in processes:
process.join()
まとめ
Pythonのマルチスレッドとマルチプロセスは、それぞれ異なるケースで有用です。この記事で紹介した実験方法と結果を参考に、適切な方法を選んでください。
コメント