Я в настоящее время повторяю задачу в цикле for внутри обратного вызова с использованием Twisted, но хотел бы, чтобы реактор прерывал цикл в обратном вызове (один), если пользователь выдает KeyboardInterrupt через Ctrl- C. Из того, что я тестировал, реактор останавливается или обрабатывает прерывания в конце обратного вызова.обратный вызов с перекручиванием - прерывание через KeyboardInterrupt
Есть ли способ отправки KeyboardInterrupt для обратного вызова или обработчика ошибок в середине прогона обратного вызова?
Приветствия,
Chris
#!/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()
Пол: Большое спасибо за объяснение! Я спрашивал себя, почему в половине случаев, если я прервал сигнал, код успешно завершился с моего кода, но вызвал исключение, ожидая в цикле реактора. – user500869