Блокировка 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)

Вы можете увидеть пример кода здесь:

Другие вопросы по тегам