相关疑难解决方法(0)

PostgreSQL + Python:关闭连接

我用Python制作了一个游戏服务器,它使用psycopg2连接到PostgreSQL数据库.我见过一些例子,我已经看到,当创建与数据库的连接时,应该在完成查询时关闭连接,例如对于每个客户端:

#create connection to db
con = psycopg2.connect (database = 'testdb', user = 'janbodnar')
cur = con.cursor ()
#process query
.
.
.
#close connection
con.close ()
Run Code Online (Sandbox Code Playgroud)

好的,当我启动我的服务器时,我有这个:

在我的课堂里

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
Run Code Online (Sandbox Code Playgroud)

也就是说,我对所有客户的所有查询使用相同的连接对象,并且从不关闭连接,这看起来比打开和关闭每个客户端的连接更好,我的服务器显然运行良好.你想到这个吗?这样做得好吗?不要做?谢谢

python

6
推荐指数
2
解决办法
1万
查看次数

Python Postgres psycopg2 ThreadedConnectionPool用尽了

我已经在这里查看了几个"太多客户"的相关主题,但仍然无法解决我的问题,所以我必须再次问这个,对我来说具体情况.

基本上,我设置了我的本地Postgres服务器,需要做成千上万的查询,所以我使用了Python psycopg2package.这是我的代码:

import psycopg2
import pandas as pd
import numpy as np
from flashtext import KeywordProcessor
from psycopg2.pool import ThreadedConnectionPool
from concurrent.futures import ThreadPoolExecutor

df = pd.DataFrame({'S':['California', 'Ohio', 'Texas'], 'T':['Dispatcher', 'Zookeeper', 'Mechanics']})
# df = pd.concat([df]*10000) # repeat df 10000 times

DSN = "postgresql://User:password@localhost/db"
tcp = ThreadedConnectionPool(1, 800, DSN)

def do_one_query(inputS, inputT):
    conn = tcp.getconn()
    c = conn.cursor()

    q = r"SELECT * from eridata where "State" = 'California' and "Title" = 'Dispatcher' limit 1;"   

    c.execute(q)
    all_results = c.fetchall()
    for …
Run Code Online (Sandbox Code Playgroud)

python postgresql database-connection threadpool

4
推荐指数
3
解决办法
4665
查看次数