【发布时间】:2021-11-28 20:58:04
【问题描述】:
在我们移植到 Azure 中的 PostgreSQL 微软数据库之前,我们的应用程序运行良好。然后周期性地,我们的应用程序无缘无故地失败,并且我们到处都有 SSL SYSCALL 错误 - 在 DELETE 上等等。我们已经尝试了互联网使用保活参数、RAM、内存和其他所有内容中描述的所有内容。我们想尝试自动重新建立连接。但是我们有一个线程连接池。看过这个帖子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()
#another python 模块有一个名为 clsEmployee 的类。我们有几十个使用上述数据库类的函数。像这样。
with DBClass() as db:
pg_conn = db.connection
cur = pg_conn.cursor()
cur.execute("SELECT * from emp")
row = cur.fetchone()[0]
【问题讨论】:
标签: python python-3.x postgresql psycopg2