私はいくつかの Twisted サーバーを作成しており、定期的に実行される WatchDog タイマーを作成しました。デフォルトの動作は、スケジュールからのデルタ時間内に呼び出されたかどうかを確認することです。これは、プログラムが過度にブロックされているかどうかを報告するのに役立ちます。また、システムの他の部分の状態をチェックするために使用できる WatchDog へのユーザー定義のコールバック関数の方法も提供します。WatchDog タイマーは twisted.internet.task.LoopingCall を使用して実装されます。ユーザー定義関数が例外を作成し、WatchDog タイマーの呼び出しが停止するかどうかが心配です。コードに例外処理がありますが、それでもクラッシュする場合は、WatchDog タイマーを再起動する方法が必要です。ただし、 LoopingCall().start() メソッドによって返される deferred の使用方法がわかりません。ここ'
import sys
from twisted.internet import reactor, defer, task
from twisted.python import log
def periodic_task():
log.msg("periodic task running")
x = 10 / 0
def periodic_task_crashed():
log.msg("periodic_task broken")
log.startLogging(sys.stdout)
my_task = task.LoopingCall(periodic_task)
d = my_task.start(1)
d.addErrback(periodic_task_crashed)
reactor.run()
このコードを実行すると、periodic_task() 関数から "定期的なタスクが実行されています" というメッセージが 1 つ表示され、それだけです。my_task.start(1) によって返される deferred には、errback が呼び出されることはありません。これは、ドキュメントを読むことで、起こるはずのことです。
誰かが私を助けて、私が間違っていることを指摘できますか?
前もって感謝します!ダグ