sql >> Database >  >> RDS >> PostgreSQL

Celery Worker Database Connection Pooling

Ik hou van Tigeronk2's idee van één verbinding per werknemer. Zoals hij zegt, onderhoudt Celery zijn eigen pool van werknemers, dus er is echt geen behoefte aan een aparte databaseverbindingspool. In de documenten van Celery Signal wordt uitgelegd hoe u aangepaste initialisatie kunt uitvoeren wanneer een werker wordt gemaakt, dus ik heb de volgende code aan mijn taken.py toegevoegd en het lijkt precies te werken zoals u zou verwachten. Ik was zelfs in staat om de verbindingen te sluiten wanneer de arbeiders worden afgesloten:

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


  1. Oracle PL/SQL-verzamelingen - Geneste tabel in de database maken

  2. SQL ORDER BY-clausule voor beginners

  3. VERTALEN (... GEBRUIKEN) Functie in Oracle

  4. Sqlite3 voegt niet meerdere rijen in volgorde in