मुझे प्रति कार्यकर्ता एक कनेक्शन का Tigeronk2 का विचार पसंद है। जैसा कि वे कहते हैं, सेलेरी श्रमिकों का अपना पूल बनाए रखता है, इसलिए वास्तव में एक अलग डेटाबेस कनेक्शन पूल की आवश्यकता नहीं है। सेलेरी सिग्नल डॉक्स बताते हैं कि जब एक कार्यकर्ता बनाया जाता है तो कस्टम इनिशियलाइज़ेशन कैसे किया जाता है, इसलिए मैंने अपने कार्यों में निम्नलिखित कोड जोड़ा। श्रमिकों के बंद होने पर भी मैं कनेक्शन बंद करने में सक्षम था:
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()