我用
Python制作了一个游戏服务器,它使用psycopg2连接到Postgresql数据库.我见过一些例子,我已经看到,当创建与数据库的连接时,应该在完成查询时关闭连接,例如对于每个客户端:
#create connection to db con = psycopg2.connect (database = 'testdb',user = 'janbodnar') cur = con.cursor () #process query . . . #close connection con.close ()
好的,当我启动我的服务器时,我有这个:
在我的课堂里
def __init __ (self): #create connection to db con = psycopg2.connect (database = 'testdb',user = 'janbodnar') cur = con.cursor () # to all customers ... def query(self): #process query,for example ... cur.execute ("DROP TABLE IF EXISTS Cars") #the connection never closes
也就是说,我对所有客户的所有查询使用相同的连接对象,并且从不关闭连接,这看起来比打开和关闭每个客户端的连接更好,我的服务器显然运行良好.你想到这个吗?
这样做得好吗?不要做?
谢谢
这可能有效但不好.问题:如何为会话设置日期时间格式?如何处理交易?临时表?如何处理错误?另见:
How can I pool connections using psycopg and gevent?
对于这样的事情,您可以使用连接池.这样,当您从新客户端(新网络连接)开始时,您将从池中获得数据库连接.使用它而不是关闭连接后,释放它并返回池.现在它可能被其他线程使用.
如果您的连接以某种方式被破坏,它可能是简单的关闭而不是返回池.每个线程都可以使用事务,您可以更改日期时间格式等会话设置.
我看到有http://initd.org/psycopg/docs/pool.html
PS在你的方法中你应该使用self.con和self.cur.