\

Pythonのスレッド処理は、並列処理を行うための重要な手段です。特にI/O待ちが発生する組み込み開発において活躍します。しかし、スレッドの終了方法については、いくつかの異なるアプローチがあります。この記事では、それらの方法とその使用例について説明します。

スレッドの終了方法

1. デーモンスレッド

Pythonでは、スレッドをデーモンスレッドとして作成することができます。デーモンスレッドは、メインスレッドが終了すると同時に自動的に終了します。

import threading
import time

def threadFoo():
    while True:
        print("foo")
        time.sleep(1)

if __name__ == "__main__":
    # daemonをTrueにすると、メインスレッドと同時に終了できる
    thread = threading.Thread(target=threadFoo, name='thread1',daemon = True)
    thread.start()
    time.sleep(5)
    print("---end---")

2. joinメソッド

スレッドのjoinメソッドを使用すると、そのスレッドの処理が終了するまでメインスレッドをブロックすることができます。

import threading
import time

def threadFoo():
    for i in range(5):
        print("foo" + str(i))
        time.sleep(1)

if __name__ == "__main__":
    thread = threading.Thread(target=threadFoo, name='thread1',daemon=True)
    thread.start()
    thread.join()
    print("---end---")

3. Eventオブジェクト

threading.Eventオブジェクトを使用すると、スレッドの終了をより細かく制御することができます。

import threading
import time

event = threading.Event()

def threadFoo():
    while True:
        print("thread start")
        time.sleep(0.2)
        # eventのフラグが立つまで待ち受ける(defalut:False)
        event.wait()
        print("thread end")

thread = threading.Thread(target=threadFoo,daemon=True)
thread.start()

ii = 0
print("-------------------defalut-----------------------")
while True:
    for i in range(5):
        time.sleep(0.3)
        print("main thread" + str(i))
    if ii%2 == 0:
        # set()によって待ち受け状態が解放される
        print("-------------------event.set()-----------------------")
        event.set()
    else:
        # clear()でフラグを落とす
        print("-------------------event.clear()-----------------------")
        event.clear()
    ii += 1

これらの方法を適切に使い分けることで、Pythonのスレッド処理をより効果的に制御することができます。スレッドの終了方法を理解し、適切に使用することで、Pythonでのマルチスレッドプログラミングがより容易になります。.

投稿者 admin

コメントを残す

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