我们正在开发一个需要数据库访问的网站。访问这样的页面工作正常;连续访问多个也没关系。但是,如果您等待很长时间(15分钟似乎已足够),访问另一页将持续很长时间(已观察到10-20分钟)。之后,this error将打印出来。
以下是相关代码:
if __name__ == "__main__":
conf = load_conf(sys.argv[1])
engine = create_engine('postgresql://%s:%s@%s:%s/%s' %
(conf['db']['user'], conf['db']['pw'], conf['db']['address'],
conf['db']['port'], conf['db']['database']), echo=False)
Session = sessionmaker(bind=engine)
session = Session()
app = make_app(session, conf)
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
数据库位于不同的服务器上。我的个人机器在荷兰,而数据库在德国的服务器中。我的合作伙伴的个人电脑在意大利。
最值得注意的是,这个问题仅在 出现在我的机器上,运行Arch Linux。我们在另外两台机器上测试了这个,运行Windows和其他一些Linux(我假设Ubuntu可以检查是否需要)。在这一点上,我们不知道如何继续调试。
当然,我会根据要求提供任何额外需要的信息。
答案 0 :(得分:3)
目前还不清楚15分钟超时的来源,尽管其他评论者表示它可能来自您计算机和服务器之间网络中的某些东西。但是,无论它来自哪里,都有几种方法可以在SQLAlchemy中解决它。
pool_pre_ping=True
选项会在尝试重用连接之前发出简单的测试查询,允许它检测到此问题并以透明方式重新连接(性能成本较低)pool_recycle=600
选项告诉sqlalchemy不要重复使用空闲时间超过10分钟的连接。这是一个更有效的问题解决方案,因为它不添加任何新查询,但它要求您计算出最佳的回收超时使用。