我可以让 Django “greenlet-safe”吗?

发布于 2024-10-21 09:40:25 字数 920 浏览 6 评论 0原文

大局是: 我想在一些应用程序中使用 eventlet,在外部使用 Django 模型时执行异步 IO。在外部使用 Django 很简单(请参阅 Django:如何使用我的模型类从 Django 外部与我的数据库交互?)但这不是主要问题。

我认为(我没有测试过)从 greenlets 使用 Django 是危险的。实际上,就 psycopg2 而言,我们有此警告(请参阅 http://www.initd.org/psycopg/docs/advanced.html#support-to-coroutine-libraries):

Psycopg 连接不是绿色的 线程安全且不能使用 同时由不同的绿色 线程

在 Django 中,每个线程有一个数据库连接(对吗?),因此在使用时可能会导致可怕的场景。是否可以以某种方式手动提供连接对象?或者将其设为“greenlet-local”?

我的动机是使用 eventlet 中的连接池 (http://eventlet.net/doc/modules/ db_pool.html),这样我就可以加快 IO 密集型应用程序的速度。

The big picture is:
I want to use eventlet in some application that does asynchronous IO while working with Django models externally. Working with Django externally is simple (see Django: How can I use my model classes to interact with my database from outside Django?) but it's not the main problem.

I presume (I haven't tested) that using Django from greenlets is dangerous. Actually, in the case of psycopg2, we have this warning (see http://www.initd.org/psycopg/docs/advanced.html#support-to-coroutine-libraries):

Psycopg connections are not green
thread safe and can’t be used
concurrently by different green
threads

In Django there is one db connection per thread (right?) and as such it may lead to scary scenarios when used. Is it possible to provide a connection object manually somehow? Or make it "greenlet-local"?

My motivation is to use connection pool from eventlet (http://eventlet.net/doc/modules/db_pool.html) so that I could speed up my IO-bound application.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨后彩虹 2024-10-28 09:40:25

有一些项目可以让 Django 与 greenlet 很好地配合工作。我会查看 psycogreen 它使用 Psycopg >= 2.2 中的协程支持。有一篇关于将 gevent、gunicorn 和 psycogreen 与 Django 一起使用的优秀博客文章:http://dbinit。 com/blog/going-green/

There are some projects out there to make Django work well with greenlet. I would check out psycogreen which uses the coroutines support in Psycopg >= 2.2. There is a good blog post on using gevent, gunicorn, and psycogreen together with Django: http://dbinit.com/blog/going-green/.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文