PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verwendung von Django ORM in Threads und Vermeidung von zu vielen Client-Ausnahmen durch Verwendung von BoundedSemaphore

Das ORM von Django verwaltet Datenbankverbindungen in Thread-lokalen Variablen. Jeder unterschiedliche Thread, der auf das ORM zugreift, erstellt also seine eigene Verbindung. Sie können das in den ersten paar Zeilen von django/db/backends/__init__.py sehen .

Wenn Sie die Anzahl der hergestellten Datenbankverbindungen begrenzen möchten, müssen Sie die Anzahl der verschiedenen Threads begrenzen, die tatsächlich auf das ORM zugreifen. Eine Lösung könnte darin bestehen, einen Dienst zu implementieren, der ORM-Anforderungen an einen Pool dedizierter ORM-Threads delegiert. Um die Anforderungen und ihre Ergebnisse von und zu anderen Threads zu übertragen, müssen Sie eine Art Nachrichtenübermittlungsmechanismus implementieren. Da dies ein typisches Producer/Consumer-Problem ist, sollten die Python-Dokumente zum Threading einige Hinweise geben, wie dies zu erreichen ist.

Bearbeiten: Ich habe gerade nach "Django Connection Pooling" gegoogelt. Es gibt viele Leute, die sich darüber beschweren, dass Django keinen richtigen Verbindungspool bereitstellt. Einige von ihnen haben es geschafft, ein separates Pooling-Paket zu integrieren. Für PostgreSQL würde ich einen Blick auf die pgpool-Middleware werfen.