2015-08-28 73 views
1

的阻塞性質我有一個web應用程序的設置是這樣的:試圖瞭解WSGI

nginx <--> gunicorn <--> flask 

我相信nginx的可以用於很多併發連接。但是我聽說從WSGI網關到燒瓶應用程序,它是阻塞的。即一次只能提供一個請求。我讀它here。我的問題是:爲什麼不能nginx調用gunicorn的另一個實例(不確定這是否是正確的術語)並且並行處理多個請求?

+0

您是否真的嘗試過並發現併發問題?這很容易通過快速配置和測試來完成。 – davidism

回答

2

這根本不是真的,Gunicorn(和所有其他WSGI應用程序服務器)可以(也應該)配置爲使用多個線程,進程或事件小程序,具體取決於特定的WSGI服務器的併發模型。每個進程中的每個線程(或eventlet)一次向其運行的應用程序發送一個請求。

Nginx無法啓動第一個或任何後續的WSGI進程。您啓動WSGI服務器,配置正確,並處理併發。 Nginx會盡可能地將請求分派給它配置爲代理的任何應用程序。

+0

我在這裏閱讀:http://bottlepy.org/docs/dev/async.html – lang2

+0

這是一篇非常具有誤導性的文章。無論如何,它是在說我在說什麼,也就是說,每個類似線程的實例一次處理一個請求。所有文章正在做的事情是,對於高併發應用程序,使用最好的類似線程的實例將是gevent eventlet,Gunicorn完全可以使用它。 – davidism

+0

如果您不想費事設置像Celery這樣的後臺任務隊列,並且只想從處理請求的eventlet本地生成另一個eventlet,那麼Eventlet通常很好。 – davidism