2016-06-08 2 views
1

Приложение, полностью запланированное и контролируемое некоторым Монитором работы, реализует JMSMessageListener ... теперь лучший способ предотвратить этот основной поток (который регистрируется на JMS Queue), чтобы не завершить его выполнение. В противном случае монитор Job отметит это задание как выполненное, в то время как в событии сообщения thead должен был работать вместо этого.Лучший способ предотвратить выполнение основного потока от завершения его выполнения

Есть 2 ways-

  • первый путь

    таймер импорта

    некоторые другие задачи ... регистрация JMS очереди сообщений

    timer.sleep (_LONG_TIME) # это остановит его от завершения исполнения

  • 2-й

    ПУТЬ

    из реактора twisted.internet импорта

    некоторые другие задачи ... регистрация JMS очереди сообщений ''»

    reactor.run() # это будет отправить контроль выполнения в реактор

так что теперь, как я это понял ... спать нить не повлияет на CPU и ресурсы машины. Хотя я не уверен, что происходит, когда контроль переходит в реактор?

ответ

0

Ничего не скажется на ЦП. Реактор python основан на ractor pattern, в его ядре есть цикл событий с блоками до тех пор, пока событие не поступит, а затем обработает его. В тривиальном случае никаких событий не предусмотрено, поэтому никакая работа не выполняется.

Возможно, стоит проверить документы с витыми реакторами. Начните здесь: http://twistedmatrix.com/documents/13.1.0/core/howto/reactor-basics.html#auto0

С помощью скрученного реактора вы можете обеспечить возможность «выхода», изменив код, чтобы отправить событие, которое вызвало завершение работы реактора. Ваш основной поток будет работать только тогда, когда это событие было опубликовано. С решением сна вам придется спать на небольшой промежуток времени, проверить, было ли отправлено событие выхода, а затем вернуться в режим сна, если это не так - это означает, что выход не был немедленным, и ваш основной поток также был бы работая без необходимости всякий раз, когда он проснулся.