Pythonでカスタム例外とマルチスレッド/マルチプロセス処理を実装する方法

この記事では、Pythonにおいてカスタム例外とマルチスレッド/マルチプロセス処理について詳しく解説します。具体的なコード例やその解説、そして応用例についても触れていきます。

目次

カスタム例外の基本

Pythonには標準の例外が多数ありますが、特定の状況でのみ発生するような例外を作成したい場面もあります。ここでは、カスタム例外の作り方とその使い道について解説します。

カスタム例外の作成方法

基本的には`Exception`クラスを継承して新しい例外クラスを作成します。以下が具体的なコードです。

class MyCustomException(Exception):
    def __init__(self, message="これはカスタム例外です"):
        super().__init__(message)

このようにして作成したカスタム例外は、`raise`文で発生させることができます。

try:
    raise MyCustomException("エラーが発生しました")
except MyCustomException as e:
    print(e)

マルチスレッド/マルチプロセス処理の基本

Pythonで同時に複数の処理を行うためには、マルチスレッドやマルチプロセスがあります。それぞれにはメリットとデメリットがあります。

マルチスレッドとは

マルチスレッドは複数のスレッドを作成して、1つのプロセス内で並行に処理を行う方法です。

import threading

def print_numbers():
    for i in range(10):
        print(i)

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_numbers)

thread1.start()
thread2.start()

thread1.join()
thread2.join()

マルチプロセスとは

マルチプロセスは、複数の独立したプロセスを作成して処理を行う方法です。

from multiprocessing import Process

def print_numbers():
    for i in range(10):
        print(i)

process1 = Process(target=print_numbers)
process2 = Process(target=print_numbers)

process1.start()
process2.start()

process1.join()
process2.join()

応用例

カスタム例外で特定のエラーハンドリング

特定のエラーが発生したときにログを取る例です。

class LogException(Exception):
    def __init__(self, message):
        self.message = message
        self.log_error()

    def log_error(self):
        with open("error.log", "a") as f:
            f.write(self.message + "\n")

この例では、`LogException`が発生すると、そのメッセージが自動的に`error.log`に書き込まれます。

マルチスレッドでWebスクレイピング

複数のWebページから情報を並行して取得する例です。

import requests
import threading

def fetch_content(url):
    response = requests.get(url)
    print(response.text[:100])

urls = ["http://example.com/page1", "http://example.com/page2"]
threads = []

for url in urls:
    thread = threading.Thread(target=fetch_content, args=(url,))
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

まとめ

Pythonでのカスタム例外とマルチスレッド/マルチプロセス処理には多くの応用可能性があります。特定のエラーに対して独自の処理を加えたり、複数の処理を効率よく並行して実行する方法を学びました。これらのテクニックは、高度なプログラムを作成する際に非常に有用です。

コメント

コメントする

目次