Python 带回调的Twisted模拟计时器

Python 带回调的Twisted模拟计时器,python,callback,twisted,Python,Callback,Twisted,我是twisted的新手,我想模拟一个计时器或类似的东西 我得到的是: def whatToCall(): print 'Before: ' + str(len(globals.session_manager)) for ses in globals.session_manager: if ses.expired is True: globals.session_manager[ses.id] = None print 'After

我是twisted的新手,我想模拟一个计时器或类似的东西

我得到的是:

def whatToCall():
    print 'Before: ' + str(len(globals.session_manager))
    for ses in globals.session_manager:
        if ses.expired is True:
            globals.session_manager[ses.id] = None
    print 'After: ' + str(len(globals.session_manager))
    reactor.callLater(15, whatToCall(), None)

def callBacks():
    reactor.callLater(15, whatToCall(), None)
....
#: Start the reactor
    reactor.callWhenRunning(callBacks())
    reactor.listenTCP(globals.port, factory)
    reactor.run()
首先,我第一次打电话不需要15秒。其次,这显然不起作用。我理解回调链和延迟的概念,但对此有些挣扎

基本上,我想检查是否有任何会话不时过期,并希望每次都安排它

已解决:使用扭曲的任务:

def checkForExpiredSessions():
   print 'Before: ' + str(len(globals.session_manager))
   for i, ses in enumerate(globals.session_manager):
      if ses.expired is True:
         del globals.session_manager[i]
   print 'After: ' + str(len(globals.session_manager))


def callBacksRun():
  l = task.LoopingCall(checkForExpiredSessions)
  l.start(15.0)
表达方式:

reactor.callWhenRunning(callBacks())
首先调用
回调
,然后将返回值传递给
reactor.callwhen运行
。类似的情况也适用于:

reactor.callLater(15, whatToCall(), None)
reactor.callWhenRunning
reactor.callLater
都接受可调用对象作为参数。除非您希望
回调
返回一个将由reactor调用的可调用对象,否则您希望编写的内容是:

reactor.callWhenRunning(callBacks)

reactor.callLater(15, whatToCall)