【Python】threading.Eventの使い方

【Python】threading.Eventの使い方

本記事ではPythonのthreadingメソッドであるEventをメモ程度にまとめています。Pythonは非常に人気なプログラミング言語です。そんなPythonでのEventの使い方が参考になれば幸いです。

本記事の目標

Eventはスレッドの待機・再開をコントロールできるクラスです。
wait()とset()で「待機」と「再開」を実現します。
Eventについて理解しやすいような例を2つ紹介します。

ちなみに、本記事の実行環境は「python 3.8.8」です。

Pythonコード1

Eventの使い方は下のような感じ。
Event.wait()でスレッドが待機されており、Event.set()で待機スレッドが再開していることが実行結果からよく分かります。

import threading
import time

def process1(event):
    event.wait()
    print('ー処理1が開始')
    time.sleep(3)  # 処理を再現
    print('ー処理1が終了')

def process2(event):
    event.wait()
    print('ーー処理2が開始')
    time.sleep(3)  # 処理を再現
    print('ーー処理2が終了')

def process3(event):
    print('ーーー処理3が開始')
    time.sleep(3)  # 処理を再現
    print('ーーー処理3が終了')
    event.set()


if __name__ == '__main__':
    event = threading.Event()

    # スレッドを行うインスタンスの作成
    p1 = threading.Thread(target=process1, args=(event,))
    p2 = threading.Thread(target=process2, args=(event,))
    p3 = threading.Thread(target=process3, args=(event,))

    p1.start()
    p2.start()
    p3.start()
【実行結果】
ーーー処理3が開始
ーーー処理3が終了
ーー処理2が開始
ー処理1が開始
ーー処理2が終了
ー処理1が終了

Pythonコード2

シンプルな例ですが下のようにも利用できます。
コードを見ながら確認してみてください。

import threading
import time

def process(event):
    print('ーprocessの処理が開始')
    event.wait()
    time.sleep(3)  # 処理を再現
    print('ーprocessの処理が終了')

if __name__ == '__main__':
    event = threading.Event()

    # スレッドを行うインスタンスの作成とスレッドの開始
    p = threading.Thread(target=process, args=(event,))
    p.start()

    print('処理が開始')
    time.sleep(3)  # 処理を再現
    print('処理が終了')
    event.set()
【実行結果】
ーprocessの処理が開始
処理が開始
処理が終了
ーprocessの処理が終了

実行結果からEventの使い方がよく分かりますね。
詳しthreading.Eventの使い方は公式リファレンスからどうぞ。

ということで本記事はPythonのEventを用いたスレッド制御方法を紹介しました。
最後まで読んでいただきありがとうございました\(^o^)/

超オススメのPC用品

PCを操作する上で、トラックボールマウスが非常におすすめです!
僕も感動したこのマウスを、騙されたと思って使ってみてください!(^^)

外部モニターで2倍以上の効率化が見込めます!
安いものだと、たったの1万円前後なのでおすすめですよー!\(^o^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です