Tornado中的异步是如何工作的?
Tornado文档中的所有示例都展示了如何使用Tornado异步地进行更多的HTTP请求。
http_client = httpclient.AsyncHTTPClient()
http_client.fetch("http://www.google.com/", handle_request)
而我想确保我的Tornado在发送下一个请求时,不会因为等待数据库(获取couchbase的命令)的响应而停下来。
查看我另一个问题,可以了解我为什么想要异步调用couchbase。
3 个回答
1
这是个旧话题,但我应该提一下,couchbase支持twisted。可以查看这个链接:Twisted API for Couchbase在Python Tornado中无法使用,还有这个链接:http://pythonhosted.org/couchbase/api/txcouchbase.html
1
可以查看一下Tornado在GitHub上的维基和这个StackOverflow上的类似问题。简单来说,做数据库操作时最好是同步进行。如果你的数据库或者调用数据库的过程是瓶颈,即使Tornado不被阻塞,你的网站速度也不会变快。进行异步调用可能更适合那些你无法控制的资源,比如其他的网络服务器,或者对你网站大部分功能不是很重要的资源,比如文件输入输出。
3
据我所知,Couchbase的驱动程序并不是一个异步驱动,所以这样做是行不通的。你需要把数据库的调用改成同步的,并尽量优化它,让它运行得更快。
另外一个(听起来有点可怕的)选择是拿Couchbase的驱动程序,跟一些像gevent的东西结合,自己做一个异步驱动。我不推荐这样做。如果你真的想尝试这个方向,可以看看这个人是怎么用Motor做的 - 他把Mongo的驱动做成了异步的。