PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Regroupement des connexions à la base de données Celery Worker

J'aime l'idée de Tigeronk2 d'une connexion par travailleur. Comme il le dit, Celery maintient son propre pool de travailleurs, il n'y a donc pas vraiment besoin d'un pool de connexion de base de données séparé. Les documents Celery Signal expliquent comment effectuer une initialisation personnalisée lors de la création d'un travailleur. J'ai donc ajouté le code suivant à mon tasks.py et il semble fonctionner exactement comme prévu. J'ai même pu fermer les connexions lorsque les travailleurs sont arrêtés :

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