我用Python制作了一个游戏服务器,它使用psycopg2连接到PostgreSQL db。我看过一些例子,我看到当创建到数据库的连接时,应该在完成查询时关闭连接,例如对于每个客户机:
#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?
对于这种情况,可以使用连接池。这样,当您从新客户机(新网络连接)开始时,就可以从池中获得数据库连接。在使用它而不是关闭连接之后,释放它并返回池。现在它可能被其他线程使用。
如果您的连接以某种方式断开,它可能是简单的关闭而不是返回池。每个线程都可以使用事务,您可以更改会话设置,如datetime格式。
我看到有http://initd.org/psycopg/docs/pool.html
PS在您的方法中应该使用
self.con
和self.cur
。我认为答案很简单:只要同时连接的客户端总数不超过postgres服务的^{} 设置,就应该没问题。否则无法接受新连接。
@MichałNiklas谢谢你的回答,谢谢你的改正self.con和self.cur,我忘了放“self”。
我澄清我对服务器和数据库了解甚少。
我打算这样做:
我的服务器为每个用户处理“线程”单独的进程,然后在每个单独的进程中,为客户查询打开一个连接,然后关闭此连接,如下所示:
在我的课堂上: 如果客户端1的新请求。。。这个客户机的“线程”,然后,查询运行。。。
他们是怎么想的?在我看来好多了。我感谢你的建议和支持。
@MichałNiklas谢谢你的回答,谢谢你的改正self.con和self.cur,我忘了加上“self”。
我澄清我对服务器和数据库了解甚少。
我打算这样做:
我的服务器为每个用户处理“线程”单独的进程,然后在每个单独的进程中,为客户查询打开一个连接,然后关闭此连接,如下所示:
在我的课堂上: 如果客户端1的新请求。。。这个客户机的“线程”,然后,查询运行。。。
他们是怎么想的?在我看来好多了。我感谢你的建议和支持。
相关问题 更多 >
编程相关推荐