2012-07-01 68 views
1

如果我使用帶有Eventlet工作者類型的Gunicorn部署Django,並且只使用一個進程,那麼在服務1000(默認)工作者連接時會發生什麼? Django的哪些部分被複制到每個線程中?是否複製了任何部分?什麼進入Eventlet + Gunicorn工作者線程?

回答

3

如果在gunicorn配置中設置了workers = 1,將創建兩個進程:1個主進程和1個輔助進程。

當您使用worker_class = eventlet時,同時連接由綠色線程處理。綠色線程不像真正的線程。簡單來說,綠色線程是功能(協同程序),只要函數遇到I/O操作就是yield

所以沒有複製。您只需要擔心將每個I/O操作都設爲「綠色」。

+0

那麼這是否意味着我有一個Django實例在內存中被所有線程共享? – Carson

+0

沒有線程。當你使用eventlet時,它實際上會創建綠色線程。換句話說,當你的api被IO綁定時,它並不會耗費大量的時間計算。所有東西都是以異步方式在單個線程中運行。 –

+0

是的,這意味着您將有一個由所有綠色線程共享的Django實例。 – temoto