python redis pubsub阻止

时间:2013-11-24 14:26:29

标签: python redis-py

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 个答案:

答案 0 :(得分:3)

有一个有用的要点,它展示了如何传递一个破坏循环和取消订阅的命令。这可能有助于了解如何以其他方式执行此操作。

for item in self.pubsub.listen():
    if item['data'] == "KILL":
        self.pubsub.unsubscribe()
        print self, "unsubscribed and finished"
        break
    else:
        self.work(item)

您可以在此处查看示例代码: