Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 龙卷风redis:为什么';听一听';以及';brpop&x27;龙卷风redis can';我不能同时工作_Python_Redis_Tornado_Coroutine - Fatal编程技术网

Python 龙卷风redis:为什么';听一听';以及';brpop&x27;龙卷风redis can';我不能同时工作

Python 龙卷风redis:为什么';听一听';以及';brpop&x27;龙卷风redis can';我不能同时工作,python,redis,tornado,coroutine,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')

代码如下所示:

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”可以接收消息。 为什么“倾听列表”不起作用?
如何同时收听列表和发布/订阅中的消息?

查看redis文档:

订阅了一个或多个频道的客户端不应发出 命令,但它可以订阅和取消订阅 其他频道。订阅和取消订阅操作的回复 以消息的形式发送,这样客户端就可以读取 一致的消息流,其中第一个元素表示类型 信息的传递

您必须使用两个连接客户端。
资料来源: