我一直在编写一些 Twisted 服务器,并创建了一个定期运行的 WatchDog 计时器。它的默认行为是检查它是否在其时间表的某个时间增量内被调用,这有助于报告程序是否被过度阻塞。它还为 WatchDog 的用户定义回调函数提供了一种方法,可用于检查系统其他部分的健康状况。WatchDog 计时器是使用 twisted.internet.task.LoopingCall 实现的。我担心用户定义的函数是否会创建异常,WatchDog 计时器将停止被调用。我在代码中有异常处理,但是如果 WatchDog 计时器仍然应该崩溃,我想有办法重新启动它。但是,我不明白如何使用 LoopingCall().start() 方法返回的延迟。这里'
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()
当我运行此代码时,我从 period_task() 函数中收到一条“正在运行的定期任务”消息,仅此而已。my_task.start(1) 返回的 deferred 永远不会被调用 errback,通过我阅读文档,这是应该发生的。
有人可以帮助我并指出我做错了什么吗?
提前致谢!道格