在特殊情况下我需要一些建议。
我有一个这样的程序:
data = [...]
multithread.Pool(n, data)
def slow_function(data)
db = psycopg2.connect(credentials)
cursor = db.cursor()
new_data = realy_slow_func()
some_query = "some update query"
cursor.execute(some_query )在每个线程中打开新连接安全吗?如果它是缓慢的,并且存在更快的方法,这并不重要。
发布于 2021-08-05 08:53:22
您应该使用连接池,它将创建一个连接池,并在线程中重用相同的连接。我也建议使用ThreadPool,以便每次运行的线程数等于DB连接池中可用的连接数。但就这个问题的范围而言,我将讨论DB连接池
我还没有测试代码,但这就是它的外观。首先创建一个connectionPool,然后在线程中从它获得一个连接,并在完成后释放连接。您还可以在线程之外管理get连接和发布,只需将连接作为参数传递,并在线程完成后发布。
将ThreadedConnectionPool突出显示为用于创建池的类,顾名思义,它适用于线程。
从医生那里:
与线程模块一起工作的连接池。注意,这个池类可以安全地在多线程应用程序中使用。
import psycopg2
from psycopg2 import pool
postgreSQL_pool = psycopg2.pool.ThreadedConnectionPool(1, 20, user="postgres",
password="pass@#29",
host="127.0.0.1",
port="5432",
database="postgres_db")
data = [...]
multithread.Pool(n, data)
def slow_function(data):
db = postgreSQL_pool.getconn()
cursor = db.cursor()
new_data = realy_slow_func()
some_query = "some update query"
cursor.execute(some_query)
cursor.close()
postgreSQL_pool.putconn(db)来源:https://pynative.com/psycopg2-python-postgresql-connection-pooling/
https://stackoverflow.com/questions/68663333
复制相似问题