2012-09-26 61 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

所以我想我會堅持汽車,希望我能理解它:( –

相關問題