Есть ли способ остановить закрученный реактор при достижении определенного состояния. Например, если переменная установлена на определенное значение, то реактор должен остановиться?
Остановить скрученный реактор по условию
Ответы (2)
В идеале вы не устанавливаете значение переменной и не останавливаете реактор, а вызываете reactor.stop()
. Иногда вы не находитесь в основном потоке, и это запрещено, поэтому вам может потребоваться вызвать reactor.callFromThread
. Вот три рабочих примера:
# in the main thread:
reactor.stop()
# in a non-main thread:
reactor.callFromThread(reactor.stop)
# A looping call that will stop the reactor on a variable being set,
# checking every 60 seconds.
from twisted.internet import task
def check_stop_flag():
if some_flag:
reactor.stop()
lc = task.LoopingCall(check_stop_flag)
lc.start(60)
person
Jerub
schedule
29.06.2011
Пример циклического вызова - это то, что я искал. Тем не менее, было бы здорово, если бы в реактор можно было добавить событие, которое говорит, что когда установлен some_flag, вызовите some_method, который вызовет response.stop.
- person gmemon; 30.06.2011
Спасибо за подробный ответ
- person gmemon; 30.06.2011
Спасибо за публикацию. Возникает вопрос, почему по умолчанию response.stop () не вызывает из основного потока ... это кажется ненужным усложнением, но я уверен, что для этого была основная причина.
- person wickedchicken; 24.04.2012
Скрученные API не являются потокобезопасными. Это более простой общий подход, чем возможность безопасного вызова некоторого, казалось бы, случайного подмножества из любого потока (что заставит вас постоянно обращаться к документации по любому конкретному API, который вы хотите использовать, чтобы определить, является ли он безопасным). И нецелесообразно делать все API-интерфейсы поточно-ориентированными (накладные расходы времени выполнения недопустимы, а реализация в некоторых случаях становится очень сложной, а сами API-интерфейсы становятся более сложными - например, какой поток вызывает методы фабрики, если фабрика используется с connectTCP в безреакторной ветке?).
- person Jean-Paul Calderone; 07.06.2012
Конечно:
if a_variable == 0:
reactor.stop()
person
Gerrat
schedule
29.06.2011