sql >> Base de Datos >  >> RDS >> PostgreSQL

Agrupación de conexiones de base de datos de Celery Worker

Me gusta la idea de tigeronk2 de una conexión por trabajador. Como él dice, Celery mantiene su propio grupo de trabajadores, por lo que realmente no hay necesidad de un grupo de conexión de base de datos separado. Los documentos de Celery Signal explican cómo realizar una inicialización personalizada cuando se crea un trabajador, así que agregué el siguiente código a mi tasks.py y parece funcionar exactamente como cabría esperar. Incluso pude cerrar las conexiones cuando los trabajadores están apagados:

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()