Django's ORM beheert databaseverbindingen in thread-local variabelen. Dus elke verschillende thread die toegang heeft tot de ORM, zal zijn eigen verbinding maken. Je kunt dat zien in de eerste paar regels van django/db/backends/__init__.py
.
Als u het aantal gemaakte databaseverbindingen wilt beperken, moet u het aantal verschillende threads dat daadwerkelijk toegang heeft tot de ORM, beperken. Een oplossing zou kunnen zijn om een service te implementeren die ORM-verzoeken delegeert aan een pool van speciale ORM-threads. Om de verzoeken en hun resultaten van en naar andere threads te verzenden, moet u een soort mechanisme voor het doorgeven van berichten implementeren. Aangezien dit een typisch producenten/consumentenprobleem is, zouden de Python-documenten over threading enkele hints moeten geven hoe dit te bereiken.
Bewerken: Ik heb net gegoogled op "django connection pooling". Er zijn veel mensen die klagen dat Django geen goede aansluitpool biedt. Sommigen van hen slaagden erin een apart poolingpakket te integreren. Voor PostgreSQL zou ik eens kijken naar de pgpool middleware.