首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python redis pubsub阻塞

python redis pubsub阻塞
EN

Stack Overflow用户
提问于 2013-11-24 14:26:29
回答 1查看 3.3K关注 0票数 2
代码语言:javascript
复制
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

在上面的代码中,我如何停止线程?

下面我有一个示例代码来向您展示我想要的内容:

代码语言:javascript
复制
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

因此,当属性停止== True时,线程将退出循环并完成。这有可能吗?如果不是的话,还有什么可供选择的?

EN

回答 1

Stack Overflow用户

发布于 2014-01-08 23:32:18

有一个有用的要点,它展示了如何传递将中断循环和取消订阅的命令。这可能是有用的,看看你如何可以以其他方式。

代码语言:javascript
复制
for item in self.pubsub.listen():
    if item['data'] == "KILL":
        self.pubsub.unsubscribe()
        print self, "unsubscribed and finished"
        break
    else:
        self.work(item)

您可以在这里看到示例代码:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20175671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档