tornado-redis:为什么龙卷风的'听'和'brpop'不能同时工作

时间:2015-07-22 09:53:32

标签: python redis tornado coroutine

这样的代码:

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的消息?

1 个答案:

答案 0 :(得分:0)

看看redis文档:

  

订阅一个或多个频道的客户 不应发出   命令 ,虽然它可以订阅和取消订阅   其他渠道。 SUBSCRIBE和UNSUBSCRIBE操作的回复   以消息的形式发送,以便客户端可以只读取一个   消息的连贯流,其中第一个元素表示类型   消息。

您必须使用两个连接客户端 资料来源:http://redis.io/topics/pubsub