2013-02-26 56 views
1

Tornado文档中的所有示例都显示了我们如何使用Tornado异步进行HTTP请求。异步在Tornado中如何工作?

http_client = httpclient.AsyncHTTPClient() 
http_client.fetch("http://www.google.com/", handle_request) 

虽然我想确保我的龙卷风并没有等待来自数据库的响应(获得couchbase的命令)到下发。

检查my other bug了解为什么我需要异步呼叫到couchbase。

+0

不是“异步”和“不等待响应”是一回事吗?所以这些例子应该告诉你究竟你想要什么,是吗? – Kevin 2013-02-26 15:55:56

+0

同样的事情,问题是Torndao开始等待Couchbase的响应。 – codersofthedark 2013-03-04 20:36:41

回答

3

据我所知Couchbase驱动程序是not an async driver所以这不会工作。使数据库调用同步并优化它尽可能快。 (可怕)的替代方案是采用couchbase的驱动程序,并使用gevent等补丁来创建自己的异步驱动程序。我不建议这样做。如果你真的想要走这条路,看看这个人做了什么Motor - 他让mongo驱动程序异步。

+0

为什么你不推荐这个? – codersofthedark 2013-03-01 11:41:42

+0

,因为它很容易犯错,因为每次couchbase制作新版本的驱动程序时你都必须再做一次。 – 2013-03-01 11:50:55

+0

问题是在给定的机器上串行我只能够每秒同步调用500个调用db,而异步调整到5000+异步。 Couchbase驱动程序效率不高,我对aysnc的计划是间接克服其低效率。你对这种情况建议如何? – codersofthedark 2013-03-01 12:03:02

1

查看Tornado wiki on github和此similar question on StackOverflow。只要你的数据库调用同步。如果您的数据库或您对数据库/数据库驱动程序的调用是瓶颈,即使龙卷风未被阻止,您的网站也不会更快。在请求不受您控制的资源时,执行异步调用可能更有意义,因为其他Web服务器或资源对于网站的大部分部分(如文件I/O)都不是至关重要的。