MENU
やすひら
やすひらと申します。
長靴を履いたタヌキ(ITエンジニア)です。
モノ作りの楽しさを発信中。
X(旧Twitter)のフォローもお願いします。

[Python]スレッド処理

プログラムをより効率的に動作させるためには、スレッド処理を理解し活用することが重要です。
Pythonではマルチスレッドプログラミングが可能で、複数のタスクを同時に処理することができます。

やすひら

Pythonのスレッド処理を紹介します

この記事でわかること
  • スレッドとは
  • Pythonのスレッド処理
目次

スレッドとは

スレッドとは、プロセス内で実行される処理単位のことです。
プログラムは1つのプロセスで順次処理を進めますが、スレッドを使用することで、複数の処理を同時に処理することができます。
重い処理や待機時間が発生する場合でも、他の処理が並行して実行できます。

スレッド処理

Pythonでは、標準ライブラリのthreadingモジュールを使用してスレッド処理を実行できます。

スレッド処理

threading.Threadクラスを使用してスレッドを作成します。

ソースコード

import threading

def task():
    print("タスクが実行されました")

# スレッドの作成
thread = threading.Thread(target=task)

# スレッドの開始
thread.start()

# メインスレッドが終了するまで待機
thread.join()

コマンド実行例

$ python3 -B python-thread.py
タスクが実行されました

関数をスレッドで実行しています。
thread.start()で、スレッドが開始され、thread.join()でスレッドの終了を待ちます。

複数スレッドの実行

複数のスレッドを同時に実行することもできます。

ソースコード

import threading
import time

def task(name, seconds):
    print(f"{name}が開始されました")
    time.sleep(seconds)
    print(f"{name}が終了しました")

# スレッドを複数作成
threads = []
for i in range(5):
    thread = threading.Thread(target=task, args=(f"タスク{i}", i+1))
    threads.append(thread)
    thread.start()

# 全スレッドが終了するまで待機
for thread in threads:
    thread.join()

print("全タスクが終了しました")

コマンド実行例

$ python3 -B python-thread-multi.py
タスク0が開始されました
タスク1が開始されました
タスク2が開始されました
タスク3が開始されました
タスク4が開始されました
タスク0が終了しました
タスク1が終了しました
タスク2が終了しました
タスク3が終了しました
タスク4が終了しました
全タスクが終了しました

5つのスレッドを生成し、スリープするタスクをスレッド処理します。
thread.start()でスレッドが開始され、thread.join()で各スレッドの終了を待ちます。

スレッドの同期

複数のスレッドが同時に同じリソースにアクセスすると、データ競合が発生する可能性があります。
PythonではLockでリソースのロックを行い、複数のスレッドによるデータアクセス競合を防止します。

ソースコード

import threading

lock = threading.Lock()
shared_resource = 0

def task():
    global shared_resource
    with lock:
        for _ in range(100000):
            shared_resource += 1

threads = []
for _ in range(2):
    thread = threading.Thread(target=task)
    threads.append(thread)
    thread.start()

for thread in threads:
    thread.join()

print(f"最終的な共有リソースの値: {shared_resource}")

コマンド実行例

$ python3 -B python-thread-data-lock.py
最終的な共有リソースの値: 200000

2つのスレッドが同じリソースにアクセスしますが、with lock:でロックをかけているため、データの競合が防止されます。

まとめ

Pythonのスレッド処理を紹介しました。

Pythonのスレッド処理は
  • 並行処理できるスレッドを作成できる
  • threadingでスレッドを実装できる
  • startでスレッドを開始する
  • joinでスレッド終了を待ち合わせる

スレッド処理を使うことで、プログラムの処理を並行して実行し、効率的な処理が可能になります。
Pythonでは、threading使ってスレッドを作成し、複数のタスクを並行して実行できます。
スレッド処理を理解して、効率的なアプリケーションを作成していきましょう。

  • URLをコピーしました!
目次