Python のデーモンスレッド

Manav Narula 2023年1月30日
  1. Python で daemon パラメータを設定してデーモンスレッドを作成する
  2. Python で setDaemon() 関数を使用してスレッドをデーモンスレッドに変更する
Python のデーモンスレッド

スレッドは処理される命令の小さなシーケンスであり、効率を上げるために異なるスレッドを同時に実行することができます。デーモンスレッドと非デーモンスレッドがあります。

このチュートリアルでは、Python のデーモンスレッドについて説明します。

Python で daemon パラメータを設定してデーモンスレッドを作成する

非デーモンスレッドとメインスレッドをサポートするスレッドは、デーモンスレッドと呼ばれます。メインスレッドの終了をブロックしません。非デーモンスレッドもメインスレッドの実行後に実行される可能性がありますが、デーモンスレッドはメインスレッドで実行を停止します。

これが、デーモンスレッドがメインスレッドと非デーモンスレッドの優れたサポートとして機能する理由です。デーモンスレッドを使用して、プロセスが完了したかどうかに関係なく、メインプログラムが終了すると停止するガベージコレクションなどの基本的な機能を実行します。

デーモンスレッドを作成するには、threading.Thread() 関数の daemon パラメーターを True に設定します。

例えば:

import threading
import time


def thread_x():
    print("Start ", threading.currentThread().name)
    time.sleep(5)
    print("Finish ", threading.currentThread().name)


def thread_y():
    print("Start ", threading.currentThread().name)
    print("Finish ", threading.currentThread().name)


x = threading.Thread(target=thread_x, name="Thread-X", daemon=True)
y = threading.Thread(target=thread_y, name="Thread-Y")


x.start()
y.start()

出力:

Start  Thread-X
Start  Thread-Y
Finish  Thread-Y

この例では、デーモンスレッドであるスレッド x が、非デーモンスレッド y の実行を停止してプログラムが終了すると、実行を停止することがわかります。

Python で setDaemon() 関数を使用してスレッドをデーモンスレッドに変更する

setDaemon() 関数を使用してスレッドを変更し、デーモンスレッドにすることもできます。この関数のパラメーターとして True を渡す必要があります。

スレッドがデーモンスレッドの場合、isDaemon() 関数は True を返します。それ以外の場合は、false を返します。

次の例では、これらのメソッドを使用します。

import threading
import time


def thread_x():
    print("Start ", threading.currentThread().name)
    time.sleep(5)
    print("Finish ", threading.currentThread().name)


def thread_y():
    print("Start ", threading.currentThread().name)
    print("Finish ", threading.currentThread().name)


x = threading.Thread(target=thread_x, name="Thread-X")
y = threading.Thread(target=thread_y, name="Thread-Y")

x.setDaemon(True)
print(x.isDaemon())
print(y.isDaemon())

x.start()
y.start()

出力:

True
False
Start  Thread-X
Start  Thread-Y
Finish  Thread-Y
著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python Thread