这样的代码:
from tornadoredis import Client
from tornado.ioloop import IOLoop
from tornado.gen import coroutine, Task
rds = Client()
@coroutine
def listen_pub():
def handle(msg):
print msg
yield Task(rds.subscribe, channels='pub')
rds.listen(handle)
@coroutine
def listen_list():
while True:
res = yield Task(rds.brpop, keys='list')
print res
def test():
listen_pub()
listen_list()
test()
IOLoop.current().start()
当我运行上面的代码时,只有'listen_list'可以接收消息。 为什么'listen_list'不起作用? 我怎样才能同时收听LIST和PUB / SUB的消息?
答案 0 :(得分:0)
看看redis文档:
订阅一个或多个频道的客户 不应发出 命令 ,虽然它可以订阅和取消订阅 其他渠道。 SUBSCRIBE和UNSUBSCRIBE操作的回复 以消息的形式发送,以便客户端可以只读取一个 消息的连贯流,其中第一个元素表示类型 消息。
您必须使用两个连接客户端 资料来源:http://redis.io/topics/pubsub