让Django变绿

时间:2012-02-14 19:01:56

标签: python django coroutine gevent greenlets

我有一个Django管理命令,可以生成数千个TCP / UDP请求。我已经使用Gevent加快了速度,因为我重新组织了我的代码以作为协同程序工作。套接字连接不再阻塞,但从我所读到的,Django的部分仍然不是绿色。 (绿色,我的意思是使用greenlets。)

你能告诉我Django的哪些部分不是绿色的,我可以做些什么让它们变绿?我认为有些DB相关的部分仍然存在阻碍。是否有任何Django库/补丁可以帮助我实现绿色?

我不太关心请求/响应周期是否为绿色因此,Gunicorn会帮助我吗?

由于

2 个答案:

答案 0 :(得分:10)

gevent猴子修补程序将标准库修补为Greenlet友好。这应该是很多常见的Django调用。

from gevent import monkey; monkey.patch_all()

就数据库而言,通常接口是阻塞的。如果您使用PostgreSQL查看psyco_gevent来修补psycopg2与gevent合作。

答案 1 :(得分:2)

只要使用C扩展或使用其他使用C扩展的第三方库,

gevent就不会使第三方库变绿。如果使用标准库,gevent可以修补它们。

某些数据库驱动程序当然依赖于数据库实现本身。仅仅因为您使用绿色库并不意味着您的数据库将表现为“绿色”。这也需要在数据库级别本身上调用。例如,Prosgresql支持自2.2版以来的异步命令处理。

您也可以查看Projects using gevent

Gunicorn将让您的生活更轻松,至少在您开始部署应用程序时。在开发过程中,我会建议使用gunicorn(使用gevent)而不是普通的django runserver命令,因为它可以更快地处理同时请求。