Kolam koneksi berfungsi dengan baik untuk hal semacam ini. Saya belum pernah bekerja dengannya dalam produksi (terutama menggunakan Django atau SQLAlchemy), tetapi psycopg2.pool
menyertakan beberapa implementasi berbeda (SimpleConnectionPool
atau PersistentConnectionPool
) yang mungkin sesuai dengan kebutuhan Anda. Secara umum, kumpulan tidak hanya membantu mengelola koneksi sebagai sumber daya bersama, tetapi juga menguji dan menginisialisasi ulang koneksi saat dibutuhkan.
from psycopg2 import pool
conn_pool = pool.PersistentConnectionPool(minconn, maxconn, **dbopts)
def work_method():
conn = conn_pool.getconn()
with conn.cursor() as stmt:
stmt.execute(sql)
conn_pool.putconn(conn)
putconn
sangat penting, sehingga pengecualian tidak meninggalkan kumpulan berpikir bahwa koneksi masih digunakan. Akan lebih baik untuk menanganinya sebagai pengelola konteks:
import contextlib
@contextlib.contextmanager
def get_db_connection():
conn = conn_pool.getconn()
yield conn
conn_pool.putconn(conn)
def work_method():
with get_db_connection() as conn:
with conn.cursor() as stmt:
stmt.execute(sql)
Semoga membantu.