我正在使用Twisted在回调中的for循环中重复一个任务,但是如果用户通过Ctrl-C发出KeyboardInterrupt,则希望反应器在回调中打破循环(一).根据我测试的结果,反应器仅在回调结束时停止或处理中断.
有没有办法在回调运行过程中向回调或错误处理程序发送KeyboardInterrupt?
干杯,
克里斯
#!/usr/bin/env python
from twisted.internet import reactor, defer
def one(result):
print "Start one()"
for i in xrange(10000):
print i
print "End one()"
reactor.stop()
def oneErrorHandler(failure):
print failure
print "INTERRUPTING one()"
reactor.stop()
if __name__ == '__main__':
d = defer.Deferred()
d.addCallback(one)
d.addErrback(oneErrorHandler)
reactor.callLater(1, d.callback, 'result')
print "STARTING REACTOR..."
try:
reactor.run()
except KeyboardInterrupt:
print "Interrupted by keyboard. Exiting."
reactor.stop()
Run Code Online (Sandbox Code Playgroud)