10

我有一个 Django 管理命令,它发出数千个 TCP/UDP 请求。我已经使用 Gevent 来加快速度,因为我已经重组了我的代码以作为协程工作。套接字连接不再阻塞,但根据我的阅读,Django 的部分仍然不是绿色的。(绿色,我的意思是使用greenlets。)

你能告诉我 Django 的哪些部分不是绿色的,我能做些什么来让它们变成绿色吗?我认为有一些与数据库相关的部分仍然会阻塞。是否有任何 Django 库/补丁可以帮助我将其变为绿色?

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

谢谢

4

2 回答 2

10

gevent Monkey 修补程序将修补标准库,使其对 Greenlet 友好。这应该需要很多常见的 Django 调用。

from gevent import monkey; monkey.patch_all()

至于数据库,通常接口是阻塞的。如果您使用 PostgreSQL,请查看psyco_gevent以猴子补丁 psycopg2 与 gevent 合作。

于 2012-02-16T11:50:34.847 回答
2

只要使用 C 扩展或使用其他使用 C 扩展的第三方库,gevent 就不会绿色第三方库。如果使用标准库,gevent 能够对其进行修补。

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

此外,您可能想使用 gevent 检查项目

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

于 2012-03-01T09:24:35.037 回答