带有回调的扭曲模拟定时器
Twisted simulate timer with callback
我是 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())
首先 调用 callBacks
,然后将 return 值传递给 reactor.callWhenRunning
。类似的情况适用于:
reactor.callLater(15, whatToCall(), None)
reactor.callWhenRunning
和 reactor.callLater
都接受可调用对象作为参数。除非你期望callBacks
到return一个要被reactor调用的可调用对象,否则你想要达到预期效果的写法是:
reactor.callWhenRunning(callBacks)
和
reactor.callLater(15, whatToCall)
我是 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())
首先 调用 callBacks
,然后将 return 值传递给 reactor.callWhenRunning
。类似的情况适用于:
reactor.callLater(15, whatToCall(), None)
reactor.callWhenRunning
和 reactor.callLater
都接受可调用对象作为参数。除非你期望callBacks
到return一个要被reactor调用的可调用对象,否则你想要达到预期效果的写法是:
reactor.callWhenRunning(callBacks)
和
reactor.callLater(15, whatToCall)