大局是:我想在一些应用程序中使用 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 绑定应用程序。