Pythonでマルチスレッドとマルチプロセスのリソース消費とパフォーマンスを測定する

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のマルチスレッドとマルチプロセスは、それぞれ異なるケースで有用です。この記事で紹介した実験方法と結果を参考に、適切な方法を選んでください。

コメント

コメントする

目次