用python的tiwsted实现一个定时器

来源:互联网 发布:京东金融数据挖掘大赛 编辑:程序博客网 时间:2024/06/05 10:16
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..