Database 我可以做“Django”吗;“绿色安全”吗;?

Database 我可以做“Django”吗;“绿色安全”吗;?,database,django,django-models,concurrency,eventlet,Database,Django,Django Models,Concurrency,Eventlet,大局是: 我想在一些应用程序中使用eventlet,这些应用程序在外部处理Django模型时执行异步IO。外部使用Django很简单(请参阅),但这不是主要问题 我认为(我还没有测试过)使用greenlets的Django是危险的。实际上,对于psycopg2,我们有以下警告(请参阅): Psycopg连接不是绿色的 线程安全,无法使用 同时由不同的绿色 线程 在Django中,每个线程有一个db连接(对吗?),因此使用时可能会导致可怕的场景。是否可以以某种方式手动提供连接对象?还是让它成为“绿

大局是: 我想在一些应用程序中使用eventlet,这些应用程序在外部处理Django模型时执行异步IO。外部使用Django很简单(请参阅),但这不是主要问题

我认为(我还没有测试过)使用greenlets的Django是危险的。实际上,对于psycopg2,我们有以下警告(请参阅):

Psycopg连接不是绿色的 线程安全,无法使用 同时由不同的绿色 线程

在Django中,每个线程有一个db连接(对吗?),因此使用时可能会导致可怕的场景。是否可以以某种方式手动提供连接对象?还是让它成为“绿色本地”


我的动机是使用eventlet()中的连接池,以便加快IO绑定应用程序的速度。

有一些项目可以让Django与greenlet很好地协同工作。我将检查在Psycopg>=2.2中哪个使用了协同程序支持。关于将gevent、gunicorn和psycogreen与Django一起使用,有一篇很好的博文:。

这很有帮助,但它并没有准确回答我的问题。经过一些阅读和挖掘,我确信我可以毫无问题地使用eventlet中的Django。唯一要做的就是运行“eventlet.monkey_patch()”,它将更改threading.local(和其他系统库),因此连接将变为“greenlet local”,而不是“thread local”。此外,eventlet还对psycopg2进行了修补,以便一切都能顺利运行。也许我误解了这个问题。如果您使用eventlet的目的是连接池,那么为什么不使用pgpool或pgbouncer呢?我使用eventlet来做一些web抓取工作,并将这些数据放入Django模型的数据库中。因此,我很好奇连接是否是“绿色安全”的,这样并发的绿色线程就不会相互冲突。他们在找猴子补缀。此外,在这之后,数据库操作也是并发的。