ОБНОВЛЕННАЯ ПОЧТА
Итак, я нашел решение для того, что я делал, это использовать Есть ли способ убить поток в Python?
Я бы хотел получить подтверждение по дизайну. У нас довольно большая система, и одним из компонентов системы является коммуникационный компонент. Он отвечает за две вещи: одну отправку сообщений и две очереди любых полученных сообщений (в файл, базу данных, очередь и т. Д.). Я получаю сообщение через предоставленную библиотеку, которая в основном может просто ждать вечно сообщение прибыть.
Вопросы:
1) Лучше ли иметь один основной поток и два вспомогательных потока?
2) Лучше ли разрешить потоку приема просто блокироваться навсегда, пока не прибудет сообщение? Или я должен разрешить тайм-аут (что является исключением) и просто продолжать цикл?
Дайте мне знать, какая дополнительная информация вам может понадобиться.
Прямо сейчас у меня в основном есть поток приема и основной поток (который также обрабатывает отправку), который вы можете увидеть ниже. Единственное, что не включено ниже, это то, что теперь я могу назвать «завершить» в MessageReceiver, и он завершится.
ОРИГИНАЛЬНЫЙ ПОЧТА
Я пытаюсь обернуть поток вокруг некоторой логики получения в Python. По сути, у нас есть приложение, которое будет иметь поток в фоновом опросе для сообщений, проблема, с которой я столкнулся, заключается в том, что часть, которая на самом деле тянет сообщения, всегда ждет сообщения. Делая невозможным завершение ... В итоге я завернул тягу в другой поток, но я хотел убедиться, что лучшего способа сделать это не было.
Оригинальный код:
class Manager:
def __init__(self):
receiver = MessageReceiver()
receiver.start()
#do other stuff sending/etc...
class MessageReceiver(Thread):
receiver = Receiver()
def __init__(self):
Thread.__init__(self)
def run(self):
#stop is a flag that i use to stop the thread...
while(not stopped ):
#can never stop because pull below blocks
message = receiver.pull()
print "Message" + message
Я знаю, что существуют очевидные проблемы с блокировкой, но является ли это подходящим способом управления потоком получения, который всегда ожидает сообщения?
Одна вещь, которую я заметил, это то, что она потребляет 100% ресурсов процессора в ожидании сообщения ...
** Если вам нужно увидеть логику остановки, пожалуйста, дайте мне знать, и я опубликую.