2014-05-14 35 views
1

我有一個REST API,現在我想創建一個網站,將該API用作唯一的主數據源。該系統是分佈式的:REST API在一組機器上,並且該站點將在其他(一個或多個)機器上。從Python使用REST API:我需要一個異步庫嗎?

我期待着有相當多的負載,所以我想盡可能提高請求的效率。

我需要一些異步HTTP請求庫或任何HTTP客戶端庫嗎?

API使用Flask完成,網站也將使用Flask和Jinja作爲模板引擎來構建。

+1

您使用什麼技術來構建您的網站? Apache Web服務器? web2py的?還有別的嗎? –

+0

已將此信息添加到問題 – artvolk

回答

2

可以使用geventFlask從通常的同步庫中獲取異步I/O。請參閱this question以獲取幫助的例子。

你也可以在gunicorn後面運行Flask,它支持產生多個worker(線程,進程或greenlet)來處理併發請求。如果你採取這種方法,Flask將保持完全同步,並且gunicorn將處理創建多個Flask實例來處理併發請求。

+0

我確實使用了gunicorn。看來我可以將gevent和gunicorn結合起來,並在我運行的每個工人中獲得異步I/O。 – artvolk

+1

@artvolk如果您已經在使用gunicorn,您可能只需切換到異步工作就可以獲得異步I/O:請參閱http://gunicorn-docs.readthedocs.org/en/latest/design.html#選擇一個工人類型和在這裏:http://gunicorn-docs.readthedocs.org/en/latest/design.html#async-workers – dano

+0

看來,我的任務,我只需要在gunicorn中使用異步工作,謝謝! – artvolk

1

開始簡單,使用的方式,這似乎很容易爲你使用。只有在需要時才考慮稍後進行優化。

如果您有數千次請求,則異步庫的使用將起作用。很快,您可能會遇到與數據庫相關的性能問題(如果您使用它),這不會由異步魔法解決。

+0

API使用了大量緩存,因此數據庫不會成爲大多數負載的瓶頸,我也考慮過在前端網站上緩存。 – artvolk

0

其實你的API是在一個單獨的機器上。即使你讓你的客戶端調用異步,它也不會對服務器產生任何影響。通過使您的調用異步,客戶端中的線程不會等待響應。當呼叫是同步/異步時,您的服務器會發生相同的反應。

如果你想打電話異步,請檢查http://stackandqueue.com/?p=57。它使用unirest來獲取和發佈異步調用

相關問題