繰り返しタイマーによるスレッド
関数を「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 サイトの他の関連記事を参照してください。