Python gevent和posgres:异步连接失败

Python gevent和posgres:异步连接失败,python,django,postgresql,gevent,Python,Django,Postgresql,Gevent,我正在使用gevent在基于Django的web系统上处理API I/O 我已使用以下方法进行了修补: import gevent.monkey; gevent.monkey.patch_socket() 我已使用以下方法修补了psychopg: import psycogreen; psycogreen.gevent.patch_psycopg() 尽管如此,某些Django调用so Model.save()失败,并出现错误:“异步连接失败”。我是否需要执行其他操作以使postgres g

我正在使用gevent在基于Django的web系统上处理API I/O

我已使用以下方法进行了修补:

import gevent.monkey; gevent.monkey.patch_socket()
我已使用以下方法修补了psychopg:

import psycogreen; psycogreen.gevent.patch_psycopg()
尽管如此,某些Django调用so Model.save()失败,并出现错误:“异步连接失败”。我是否需要执行其他操作以使postgres greenlet在Django环境中安全?还有什么我遗漏的吗?

关于这个问题有一个问题,不幸的是,它是用俄语写的。让我引用最后一部分:

所有连接都存储在中,即 例如。每次都是ORM 即将发出查询,它通过调用 连接['default']。接下来,ConnectionHandler.\uuuu getattr\uuuuu会检查中是否存在连接 ,并创建一个新的 空的

使用后,应关闭所有打开的连接。有一个信号 ,由 . Django关闭数据库连接 在最后一刻,当没有人能再使用它的时候,它 看起来很合理

然而,ConnectionHandler如何存储数据库还有一个棘手的部分 连接。它使用 经过修补。声明一次,这个 这座建筑在每一个绿地上都是独一无二的。控制器 *某个视图*在一个greenlet中开始工作,现在我们在*ConnectionHandler.\u connections*中有了一个连接。然后我们创造一些 更多的绿色小菜,哪一个是空的 *ConnectionHandlers.\u connections*,他们从池中获取了connectinos。新的greenlet完成后,其local()的内容就消失了, 数据库连接没有返回到池中就随同它们一起消失了。在 过了一会儿,游泳池就空了

开发Django+gevent时,您应该始终牢记这一点并密切关注 通过调用数据库连接。信息技术 也应该在异常时调用,您可以为 比如说:

class autoclose(object):
    def __init__(self, f=None):
        self.f = f

    def __call__(self, *args, **kwargs):
        with self:
            return self.f(*args, **kwargs)

    def __enter__(self):
        pass

    def __exit__(self, exc_type, exc_info, tb):
        from django.db import close_connection
        close_connection()
        return exc_type is None