Jag gillar tigeronk2s idé om en anslutning per arbetare. Som han säger, upprätthåller Celery sin egen pool av arbetare så det finns verkligen inget behov av en separat databasanslutningspool. Celery Signal-dokumenten förklarar hur man gör anpassad initiering när en arbetare skapas så jag lade till följande kod till min tasks.py och det verkar fungera precis som du förväntar dig. Jag kunde till och med stänga anslutningarna när arbetarna stängs av:
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()