操作成功完成后是否应取消Twisted超时?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作成功完成后是否应取消Twisted超时?相关的知识,希望对你有一定的参考价值。
建议的做法是处理在超时到期之前成功完成的Twisted操作设置的超时?
超时是否应该继续运行并依赖于Deferred.cancel()
方法对完成的延期没有影响?
或者在操作完成时明确取消超时是否更好?
第二个选项看起来更干净,但需要更复杂且容易出错的代码(很容易留下正在运行的计时器,特别是对于需要几个步骤的操作)。
答案
也许最好的方法是在设置超时的同一地方向延迟添加超时取消回调。
from twisted.internet import reactor, task
def foo():
return 'done'
def somethingPossiblyCanceled():
return task.deferLater(reactor, 1, foo)
def addTimeout(d, duration):
timeout = reactor.callLater(duration, d.cancel)
def cancelTimeout(result):
if timeout.active():
timeout.cancel()
print('(timeout canceled)')
return result
d.addBoth(cancelTimeout)
def main():
d = somethingPossiblyCanceled()
addTimeout(d, 2)
def finished(result):
print(result)
reactor.stop()
def canceled(failure):
print('timed out: {0}'.format(failure))
reactor.stop()
d.addCallbacks(finished, canceled)
reactor.callWhenRunning(main)
reactor.run()
以上是关于操作成功完成后是否应取消Twisted超时?的主要内容,如果未能解决你的问题,请参考以下文章
编写Twisted Client以向多个API调用发送循环GET请求并记录响应