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