tornado-redis: 为什么 tornado-redis 的 'listen' 和 'brpop' 不能同时监听


我想在一个系统启动的时候,同时监听 redis 的一个 LIST 和 PUB/SUB 的一个 channel,但是发现两者不能同时运行。具体表现是:先调用 listen_pub 时 listen_list 完全不工作;先调用 listen_list 时,只能收到一条 push 数据,然后协程切换到 listen_pub,listen_list 又不工作了

代码如下:


 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()

想请教各位大牛问题出在哪?该怎样同时监听这两个?

tornado-redis python Redis coroutine tornado

永远的真实 9 years, 9 months ago

Your Answer