python-使用sqlalchemy和postgres的SSL syscall错误错误文件描述符
作者:互联网
所以我有一个守护进程,通过sqlalchemy与Postgres对话.守护程序执行以下操作:
while True:
oEngine = setup_new_engine()
with oEngine.connect() as conn:
Logger.debug("connection established")
DBSession = sessionmaker(bind=conn)()
Logger.debug('DBSession created. id={0}'.format(id(DBSession)))
#do a bunch of stuff with DBSession
DBSession.commit()
Logger.debug('DBSession committed. id={0}'.format(id(DBSession)))
在永久循环的第一个迭代中,一切正常.一阵子. DBSession成功地对数据库进行了一些查询.但是随后一个查询失败并显示以下错误:
OperationalError: (OperationalError) SSL SYSCALL error: Bad file descriptor
这告诉我正在使用封闭的连接或文件描述符.但是连接是由守护程序创建和维护的,所以我不知道这意味着什么.
换句话说,会发生以下情况:
create engine
open connection
setup dbsession
query dbsession => works great
query dbsession => ERROR
有问题的查询如下所示:
DBSession.query(Login)
.filter(Login.LFTime == oLineTime)
.filter(Login.success == self.success)
.count()
在我看来,这完全合理.
我的问题是:这种行为可能有哪些原因?如何解决或隔离问题?
让我知道您是否需要更多代码.有很多东西,所以我在这里采用了极简主义的方法…
解决方法:
我通过考虑会话范围而不是事务范围来解决此问题.
while True:
do_stuff()
def do_stuff():
oEngine = setup_new_engine()
with oEngine.connect() as conn:
Logger.debug("connection established")
DBSession = sessionmaker(bind=conn)()
#do a bunch of stuff with DBSession
DBSession.commit()
DBSession.close()
我仍然想知道为什么这可以解决问题…
标签:ssl,postgresql,sqlalchemy,system-calls,python 来源: https://codeday.me/bug/20191122/2056023.html