スレッドの基本操作 | スレッドの作成 | Python本格超入門

スポンサーリンク
スポンサーリンク

スレッドの基本操作

Pythonでは、スレッドを使ってプログラムの並行処理を行うことができます。スレッドを使うことで、複数の処理を同時に実行し、プログラムの効率を上げることが可能です。Pythonのthreadingモジュールを使うと、簡単にスレッドを作成し、制御することができます。ここでは、スレッドの基本的な操作方法を解説します。

スレッドの作成

Pythonでスレッドを作成するには、threading.Threadクラスを使用します。以下の例では、関数をスレッドで実行します。

import threading
import time

def print_numbers():
    for i in range(5):
        print(f"Number: {i}")
        time.sleep(1)

# スレッドの作成と開始
thread = threading.Thread(target=print_numbers)
thread.start()

# メインスレッドの処理
for i in range(5):
    print(f"Main thread: {i}")
    time.sleep(0.5)

このコードでは、print_numbers関数をスレッドとして実行しながら、メインスレッドも並行して動作しています。スレッドを作成する際は、target引数に実行したい関数を指定します。start()メソッドを呼び出すことでスレッドが開始されます。

スレッドの待機(join)

メインスレッドが終了する前に、すべてのスレッドが終了するまで待機することが必要な場合は、join()メソッドを使用します。join()を使うことで、指定したスレッドの終了を待つことができます。

thread.join()

この一行を追加することで、スレッドが終了するまでメインスレッドは待機し、すべての処理が完了してから次の処理に進みます。

スレッドの停止方法

スレッドを強制的に停止することは推奨されていません。Pythonでは、スレッドを安全に停止するための仕組みが用意されていないため、フラグを使って自分で制御する方法が一般的です。以下は、スレッドを停止するための簡単な方法です。

import threading
import time

class StoppableThread(threading.Thread):
    def __init__(self):
        super().__init__()
        self._stop_event = threading.Event()

    def run(self):
        while not self._stop_event.is_set():
            print("Running...")
            time.sleep(1)

    def stop(self):
        self._stop_event.set()

# スレッドの作成
thread = StoppableThread()
thread.start()

# 一定時間後に停止
time.sleep(5)
thread.stop()
thread.join()

このコードでは、Eventを使ってスレッドを停止するためのフラグを設定しています。stop()メソッドが呼ばれると、スレッド内のループが終了し、スレッドが安全に停止します。

スレッドの状態確認

スレッドが動作しているかどうかを確認するには、is_alive()メソッドを使用します。次のコードは、スレッドの状態をチェックする例です。

if thread.is_alive():
    print("スレッドはまだ実行中です")
else:
    print("スレッドは終了しました")

このメソッドを使用することで、スレッドがまだ動作しているかどうかを簡単に確認できます。

まとめ

Pythonのthreadingモジュールを使用することで、複数の処理を同時に実行できるスレッドを作成することができます。スレッドの作成、開始、終了、停止には基本的なメソッドがあり、start()でスレッドを開始し、join()で終了を待機できます。また、スレッドの安全な停止には、Eventを利用してフラグを立てる方法が推奨されています。スレッドをうまく活用することで、Pythonプログラムを効率的に並行処理することが可能です。