現在、Twisted を使用してコールバック内の for ループでタスクを繰り返していますが、ユーザーが Ctrl-C を介して KeyboardInterrupt を発行した場合、リアクターがコールバック (1 つ) でループを中断するようにしたいと考えています。私がテストしたところ、リアクターはコールバックの最後でのみ停止または割り込みを処理します。
コールバックの実行中に、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()