ホームページ  >  記事  >  バックエンド開発  >  「RuntimeError: スレッドは 1 回しか開始できません」問題を発生させずに、「threading.Timer」を使用して繰り返し関数を実装する方法

「RuntimeError: スレッドは 1 回しか開始できません」問題を発生させずに、「threading.Timer」を使用して繰り返し関数を実装する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-12 05:13:01653ブラウズ

How to Implement a Recurring Function with 'threading.Timer' Without the 'RuntimeError: threads can only be started once' Issue?

「threading.Timer」を使用した繰り返し関数の実装

「n」秒ごとに繰り返し実行される関数の作成は、プログラミング。ただし、この目的で 'threading.Timer' を使用すると課題が生じる可能性があります。

1 つの方法では、以下の疑似コードに示すように、タイマー スレッドを複数回開始する必要があります。

t=threading.timer(0.5,function)
while True:
    t.cancel()
    t.start()

ただし、 「threading.Timer」オブジェクトは 1 回しか開始できないため、「RuntimeError: スレッドは 1 回しか開始できません」エラーが発生する可能性があります。これに対処するために、タイマーの繰り返しの実行とキャンセルを処理するカスタム スレッド クラスを作成できます:

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

    def run(self):
        while not self.stopped.wait(0.5):
            print("my thread")
            # call a function

メイン コードで、タイマー スレッドを制御するイベントを作成できます:

stopFlag = Event()
thread = MyThread(stopFlag)
thread.start()
# this will stop the timer
stopFlag.set()

このアプローチを使用すると、「RuntimeError」問題が発生することなく、必要に応じて繰り返し関数を開始および停止できます。

以上が「RuntimeError: スレッドは 1 回しか開始できません」問題を発生させずに、「threading.Timer」を使用して繰り返し関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。