Jeg kan godt lide tigeronk2s idé om én forbindelse pr. arbejder. Som han siger, vedligeholder Celery sin egen pulje af arbejdere, så der er virkelig ikke behov for en separat databaseforbindelsespulje. Celery Signal-dokumenterne forklarer, hvordan man laver tilpasset initialisering, når en arbejder er oprettet, så jeg tilføjede følgende kode til min tasks.py, og det ser ud til at fungere præcis, som du ville forvente. Jeg var endda i stand til at lukke forbindelserne, når arbejderne er lukket:
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()