twisted LoopingCall代码阅读

LoopingCall循环执行的关键操作

#
# Class LoopingCall
#
def __call__(self):
    def cb(result):
        import ipdb; ipdb.set_trace()
        if self.running: # self.running为True时,开始定时任务
            self._reschedule()
        else:
            # self.running为False时,定时任务结束。
            # 注意:在self.running为True后,下面代码还会被执行一次
            # 达到清空self.deferred中callbacks的目的
            # 
            # reactor.run()依旧运行
            d, self.deferred = self.deferred, None
            d.callback(self)

    def eb(failure):
        self.running = False
        d, self.deferred = self.deferred, None
        d.errback(failure)

    self.call = None
    d = defer.maybeDeferred(self.f, *self.a, **self.kw)
    d.addCallback(cb)
    d.addErrback(eb)

你可能感兴趣的:(twisted LoopingCall代码阅读)