ORM Django zarządza połączeniami z bazą danych w zmiennych lokalnych wątków. Tak więc każdy inny wątek uzyskujący dostęp do ORM utworzy własne połączenie. Możesz to zobaczyć w pierwszych kilku wierszach django/db/backends/__init__.py
.
Jeśli chcesz ograniczyć liczbę wykonanych połączeń z bazą danych, musisz ograniczyć liczbę różnych wątków, które faktycznie uzyskują dostęp do ORM. Rozwiązaniem może być wdrożenie usługi, która deleguje żądania ORM do puli dedykowanych wątków ORM. Aby przesyłać żądania i ich wyniki zi do innych wątków, będziesz musiał zaimplementować jakiś mechanizm przekazywania wiadomości. Ponieważ jest to typowy problem producenta/konsumenta, dokumentacja Pythona dotycząca wątków powinna zawierać wskazówki, jak to osiągnąć.
Edytuj: Właśnie wygooglowałem "pulowanie połączeń django". Wiele osób narzeka, że Django nie zapewnia odpowiedniej puli połączeń. Niektórym z nich udało się zintegrować osobny pakiet poolingowy. W przypadku PostgreSQL przyjrzę się oprogramowaniu pośredniczącemu pgpool.