【问题标题】:tornado-redis: Why the 'listen' and the 'brpop' of tornado-redis can't work at the same timetornado-redis:为什么 tornado-redis 的 'listen' 和 'brpop' 不能同时工作
【发布时间】:2023-11-05 17:11:02
【问题描述】:

如下代码:

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

【问题讨论】:

    标签: python redis tornado coroutine


    【解决方案1】:

    看看redis文档:

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

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

    【讨论】:

      最近更新 更多