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

Pool de conexão de banco de dados do trabalhador de aipo


Eu gosto da ideia do tigeronk2 de uma conexão por trabalhador. Como ele diz, o Celery mantém seu próprio pool de trabalhadores, de modo que não há necessidade de um pool de conexão de banco de dados separado. Os documentos do Celery Signal explicam como fazer a inicialização personalizada quando um trabalhador é criado, então adicionei o seguinte código ao meu tasks.py e parece funcionar exatamente como você esperaria. Consegui até fechar as conexões quando os trabalhadores são desligados:
from celery.signals import worker_process_init, worker_process_shutdown

db_conn = None

@worker_process_init.connect
def init_worker(**kwargs):
    global db_conn
    print('Initializing database connection for worker.')
    db_conn = db.connect(DB_CONNECT_STRING)


@worker_process_shutdown.connect
def shutdown_worker(**kwargs):
    global db_conn
    if db_conn:
        print('Closing database connectionn for worker.')
        db_conn.close()