【发布时间】:2011-07-11 05:25:03
【问题描述】:
大图是: 我想在一些在外部使用 Django 模型时执行异步 IO 的应用程序中使用 eventlet。在外部使用 Django 很简单(参见 Django: How can I use my model classes to interact with my database from outside 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 绑定应用程序。
【问题讨论】:
标签: database django django-models concurrency eventlet