如何正确使用psycopg2与cherrypy?

时间:2016-05-21 16:19:39

标签: python thread-safety psycopg2 cherrypy

前几天我写了一篇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是最好的方法。我怎么能这样做?

0 个答案:

没有答案