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时,线程将退出循环并完成。 那可能吗?如果它不是什么选择?
答案 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)
您可以在此处查看示例代码: