Hel*_*tos 12 python asynchronous tornado redis
我试图找到如何异步使用Redis和Tornado.我找到了龙卷风 -但是我需要的不仅仅是yield在代码中添加一个.
我有以下代码:
import redis
import tornado.web
class WaiterHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
client = redis.StrictRedis(port=6279)
pubsub = client.pubsub()
pubsub.subscribe('test_channel')
for item in pubsub.listen():
if item['type'] == 'message':
print item['channel']
print item['data']
self.write(item['data'])
self.finish()
class GetHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello world")
application = tornado.web.Application([
(r"/", GetHandler),
(r"/wait", WaiterHandler),
])
if __name__ == '__main__':
application.listen(8888)
print 'running'
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
我需要访问/网址并获取"Hello World",而有一个请求待处理/wait.我该怎么做?
您不应该在主Tornado线程中使用Redis pub/sub,因为它会阻止IO循环.您可以在主线程中处理来自Web客户端的长轮询,但是您应该创建一个单独的线程来侦听Redis.然后ioloop.add_callback(),您可以threading.Queue在接收消息时使用和/或a 与主线程进行通信.
您需要使用Tornado IOLoop兼容的redis客户端.
这是toredis中的pubsub示例:https://github.com/mrjoes/toredis/blob/master/tests/test_handler.py
| 归档时间: |
|
| 查看次数: |
10531 次 |
| 最近记录: |