前几天我写了一篇CherryPy webapp。从PostgreSQL查询一些数据,我使用psycopg2。虽然在我的本地测试中一切都运行良好,但它有时会在实际情况下崩溃(更多的页面加载)。
不幸的是,我现在没有确切的回溯消息,但是如果我没记错的话,他们就无法连接或连接已经关闭了。我会尽快添加它们。
Psycopg / Postgres : Connections hang out randomly似乎有一个非常相似的问题,但他们的解决方案似乎是一个黑客。对此的另一个评论建议使用psycopg2.pool.ThreadedConnectionPool
。
我的相关代码段将是:
def connect_database(thread_index):
cherrypy.thread_data.dbconn = psycopg2.connect(mydbstring)
cherrypy.thread_data.dbconn.autocommit=True
if __name__ == '__main__':
cherrypy.engine.subscribe('start_thread', connect_database)
cherrypy.quickstart(Root())
cherrypy.engine.start()
cherrypy.engine.block()
我使用这样的数据库连接:
with cherrypy.thread_data.dbconn.cursor() as cursor:
cursor.execute("SELECT * FROM posts;")
results = cursor.fetchall()
通过阅读(非常随机的)http://tools.cherrypy.org/wiki/Databases,我做到了这一点。该页面上的评论已有近10年的历史,看起来非常复杂。必须有更好的方法吗?(tm)
我认为使用psycopg2.pool.ThreadedConnectionPool
是最好的方法。我怎么能这样做?