我可以让Django“绿色安全”吗?

时间:2011-03-08 15:49:31

标签: database django django-models concurrency eventlet

总体情况是:   我想在一些外部使用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绑定应用程序。

1 个答案:

答案 0 :(得分:7)

有一些项目可以让Django与greenlet配合良好。我会查看使用Psycopg> = 2.2中的协同程序支持的psycogreen。有一篇关于使用gevent,gunicorn和psycogreen以及Django的好文章:http://dbinit.com/blog/going-green/