2012-09-26 108 views
0

我使用龙卷风为它的简单性,并使用它与Pymongo,因为我总是听到关于异步调用,服务很多客户端,然后,我问,什么是真正的异步调用数据库,所以这个代码例如:这是使用数据库调用时的一个坏习惯吗?

例如,假设一个页面,其中用户有4个区域在哪里搜索,所以结果将是一个4结果。

A = calls the database to search for an element a. 
B = calls the database to search for an element b. 
C = calls the database to search for an element c. 
D = calls the database to search for an element d. 
then render a pages where a user will see the results (a,b,c,d) 

所以,这将是服务器中的杀手,因为他一定要留下所有的4个请求来完成,否则它成为第一个结果,然后等待,即使数据库调用阻塞和使他将所有的结果加入到客户端?或者4个操作的拆分必须使用异步数据库库(如Motor或Asyncmongo)来完成?

回答

1

每次调用PyMongo都会阻塞Tornado的IOLoop,并阻止进一步处理任何客户端HTTP请求,直到PyMongo方法完成。

http://api.mongodb.org/python/current/faq.html#does-pymongo-support-asynchronous-frameworks-like-gevent-tornado-or-twisted

+0

所以从发现它们在水桶和渲染时间“”,直到呈现模板会被阻塞,被发现时没有释放ressources,然后是B,然后是C ......和组吗? –

+1

是的。因此,确保你所有的Mongo查询速度都很快。 –

+0

所以我想我会坚持汽车,希望我能理解它:( –

相关问题