PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

psycopg2 e script python infinito


Um pool de conexões funciona bem para esse tipo de coisa. Eu não trabalhei com isso em produção (usando principalmente Django ou SQLAlchemy), mas psycopg2.pool inclui algumas implementações diferentes (SimpleConnectionPool ou PersistentConnectionPool ) que provavelmente atenderia a sua necessidade. De um modo geral, um pool não apenas ajuda no gerenciamento de conexões como um recurso compartilhado, mas também no teste e na reinicialização da conexão quando necessário.
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)

O putconn é extremamente importante, para que uma exceção não saia do pool pensando que a conexão ainda está em uso. Seria bom lidar com isso como um gerenciador de contexto:
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)

Espero que ajude.