我们的应用程序运行良好,直到我们将 PostgreSQL 移植到 Azure 中的 Microsoft 数据库。然后,我们的应用程序会定期无故失败,并且到处都会出现 SSL SYSCALL 错误 - 删除等。我们已经尝试了互联网上描述的所有内容 - 使用 keepalive args、RAM、内存和其他所有内容。我们想尝试自动重新建立连接。但我们有一个线程连接池。看过这个帖子Psycopg2 在类内自动重新连接 https://stackoverflow.com/questions/62094660/psycopg2-auto-reconnect-inside-a-class但是我们读取数据库的函数在另一个类中。所以我们有两个问题:
1)SSL SYSCALL错误的原因是什么?我已经搜索了所有线索,并且排除了常见的嫌疑人。
2)如何在线程连接池类中发生故障时重新连接 - >这正在烧瓶应用程序中使用
这是我们的应用程序的结构
class DBClass(object):
_instance = None
conn= None
def __new__(cls):
if cls._instance is None:
cls._instance = object.__new__(cls)
try:
max_conn = 12
keepalive_args = { "keepalives": 1, "keepalives_idle": 25, "keepalives_interval": 4,"keepalives_count": 9,
}
db._instance.pool = psycopg2.pool.ThreadedConnectionPool(3, max_conn, db=,
host=, user=,
password=,
port=, **keepalive_args)
except Exception as ex:
db._instance = None
raise ex
return cls._instance
def __enter__(self):
self.conn= self._instance.pool.getconn()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self._instance.pool.putconn(self.connection)
def __del__(self):
self._instance.pool.closeall()
#另一个 python 模块有一个名为 clsEmployee 的类。我们有几十个使用上述数据库类的函数。像这样的东西。
with DBClass() as db:
pg_conn = db.connection
cur = pg_conn.cursor()
cur.execute("SELECT * from emp")
row = cur.fetchone()[0]