「threading.Timer」が繰り返し開始されると「RuntimeError」が発生するのはなぜですか?

DDD
リリース: 2024-11-10 17:20:03
オリジナル
319 人が閲覧しました

Why Does `threading.Timer` Raise a `RuntimeError` When Repeatedly Started?

繰り返しタイマーによるスレッド

関数を「n」秒ごとに定期的に実行するには、Python threading.Timer クラスが実用的なソリューションを提供します。 。ただし、繰り返し開始、停止、リセットする必要がある場合、このタイマーの使用は難しい場合があります。

0.5 秒ごとに関数を起動するとします。次のことを試してみてください:

import threading

def function_to_execute():
    # Your function code here

t = threading.Timer(0.5, function_to_execute)

while True:
    t.cancel()
    t.start()
ログイン後にコピー

ただし、このコードでは、スレッドを複数回開始することについてのエラーが発生し、RuntimeError が発生します。それはなぜですか?

デフォルトでは、タイマー スレッドの start() メソッドは 1 回しか呼び出すことができません。しかし、タイマーのキャンセルと再起動を繰り返しているため、この問題が発生します。

再利用可能なタイマー スレッドの作成

この制限を克服するには、次の方法が適しています。タイマー スレッドを 1 回だけ開始します。スレッド内で、関数の繰り返し実行を実装します。

import threading

class MyThread(threading.Thread):
    def __init__(self, event):
        threading.Thread.__init__(self)
        self.stopped = event

    def run(self):
        while not self.stopped.wait(0.5):
            # Execute your function here

# Create a stop event
stopFlag = threading.Event()

# Start the timer thread
thread = MyThread(stopFlag)
thread.start()
ログイン後にコピー

この設定では、タイマー スレッドは関数を 0.5 秒ごとに継続的に実行します。タイマーを停止するには、stopFlag イベントを設定するだけです:

# Stop the timer
stopFlag.set()
ログイン後にコピー

このメソッドを使用すると、RuntimeError が発生することなく、必要に応じてタイマーの開始、停止、リセットを繰り返し行うことができます。

以上が「threading.Timer」が繰り返し開始されると「RuntimeError」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート