2012-02-14 37 views
10

我有一個Django管理命令,使數以千計的TCP/UDP請求。我已經使用Gevent來加速這一點,因爲我已經重新構建了我的代碼以作爲協同程序工作。套接字連接不再阻塞,但從我讀過的部分,Django仍然不是綠色的。 (綠色,我的意思是使用greenlet。)使Django走綠色

你能告訴我Django的哪些部分不是綠色的,我可以做些什麼來使它們變成綠色?有一些與數據庫相關的部分仍然阻塞我的想法。有沒有Django的庫/補丁可以幫助我使它變綠?

我不太在意要求/響應週期是綠色的,因此,Gunicorn會幫助我嗎?

謝謝

回答

10

gevent monkey patcher將修補標準庫,使其對Greenlet友好。這應該需要很多普通的Django調用。

from gevent import monkey; monkey.patch_all() 

就數據庫而言,通常接口是阻塞的。如果你使用PostgreSQL查看psyco_gevent猴子補丁psycopg2與gevent合作。

2

只要使用C擴展名或使用其他使用C擴展名的第三方庫,gevent就不會使用第三方庫。如果使用標準庫,gevent可以對它們進行修補。

某些數據庫驅動程序當然依賴於數據庫實現本身。僅僅因爲你使用了一個綠色圖書館並不意味着你的數據庫會表現「綠色」。這也需要在數據庫級別上調用。例如,Prosgresql確實支持自2.2版以來的異步命令處理。您可能還想檢查Projects using gevent

Gunicorn會讓你的生活更輕鬆,至少在你開始部署你的應用時。同樣在開發過程中,我會推薦gunicorn(與gevent)通過正常的django runserver命令,只是因爲它可以更快地處理同時請求。