2012-02-14 77 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命令,只是因为它可以更快地处理同时请求。