2013-02-26 63 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)都不是至關重要的。