Блокировка Python Redis Pubsub
import redis
import threading
class Listener(threading.Thread):
def __init__(self, r, channel):
threading.Thread.__init__(self)
self.redis = r
self.pubsub = self.redis.pubsub()
self.pubsub.subscribe(channel)
def run(self):
for item in self.pubsub.listen():
# do stuff
pass
в приведенном выше коде, как мне остановить поток?
Ниже у меня есть пример кода, чтобы показать вам, что я хотел бы:
class Listener(threading.Thread):
def __init__(self, r, channel):
threading.Thread.__init__(self)
self.redis = r
self.pubsub = self.redis.pubsub()
self.pubsub.subscribe(channel)
self.stop = False
def run(self):
while not stop:
# get item from channel
Поэтому, когда атрибут stop == True, поток выйдет из цикла и завершится. Это возможно? Если это не то, что альтернативы?
1 ответ
Есть полезная суть, показывающая, как передать команду, которая прервет цикл и откажется от подписки. Это может быть полезно, чтобы увидеть, как вы могли бы сделать это другими способами.
for item in self.pubsub.listen():
if item['data'] == "KILL":
self.pubsub.unsubscribe()
print self, "unsubscribed and finished"
break
else:
self.work(item)
Вы можете увидеть пример кода здесь: