I am using Celery standalone (not within Django). I am planning to have one worker task type running on multiple physical machines. The task does the following
Have one DB connection per worker process. Since celery itself maintains a pool of worker processes, your db connections will always be equal to the number of celery workers. Flip side, sort of, it will tie up db connection pooling to celery worker process management. But that should be fine given that GIL allows only one thread at a time in a process.