class Timer:
def __init__(self):
self.reactor = None
self.interval = Interval()
self.tple = None
self.cancel_flag = False
def update_reactor(self, reactor):
self.reactor = reactor
def schedule_timer(self, sec=0, usec=0):
self.cancel_flag = False
self.interval.sec = sec
self.interval.usec = usec
self.tple = self.reactor.callLater(self.interval.sec + self.interval.usec / 1000000, self.time_out)
def cancel_timer(self):
if (self.tple != None and self.tple.called == False):
self.tple.cancel()
self.tple = None
if (self.tple != None and self.tple.called == True):
self.cancel_flag = True
self.tple = None
def time_out(self):
if (self.cancel_flag == False):
self.handle_timeout()
if (self.cancel_flag == False):
self.reactor.callLater(self.interval.sec + self.interval.usec / 1000000, self.time_out)
def handle_timeout(self):
pass
上网百度了半天,都没有用twsited实现一个完全意义上的定时器。网上资料好多都有callLater的用法。。却没用取消定时器的资料。。还是自已动手丰衣足食啊。
看了一下reactor的源码。callLater回返回一个DelayedCall的对像。。就是上面tple的对像。。twisted也用tple命名的。。这个DelayedCall里面有个叫cancel方法。。是取消定时器的。还要注意的是.如果这个定时器已经触发了,再cancel的话。。会报异常的。。所有cancel的时候要判断一下DelayedCall里的一个字段called..
本文详细介绍了如何利用Twisted库的callLater方法创建自定义定时器,并阐述了如何在定时器触发前进行取消操作及处理相关异常。通过解析源码和实践案例,读者将掌握在复杂应用中灵活使用定时器的技术要点。

1157

被折叠的 条评论
为什么被折叠?



