PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Utilizzo di Django ORM nei thread ed evitare troppe eccezioni di client utilizzando BoundedSemaphore

L'ORM di Django gestisce le connessioni al database nelle variabili thread-local. Quindi ogni thread diverso che accede all'ORM creerà la propria connessione. Puoi vederlo nelle prime righe di django/db/backends/__init__.py .

Se si desidera limitare il numero di connessioni al database effettuate, è necessario limitare il numero di thread diversi che accedono effettivamente all'ORM. Una soluzione potrebbe essere quella di implementare un servizio che deleghi le richieste ORM a un pool di thread ORM dedicati. Per trasmettere le richieste ei loro risultati da e verso altri thread dovrai implementare una sorta di meccanismo di passaggio dei messaggi. Poiché questo è un tipico problema del produttore/consumatore, i documenti Python sul threading dovrebbero fornire alcuni suggerimenti su come ottenerlo.

Modifica: Ho appena cercato su Google "pooling di connessioni django". Ci sono molte persone che si lamentano del fatto che Django non fornisce un pool di connessioni adeguato. Alcuni di loro sono riusciti a integrare un pacchetto di pooling separato. Per PostgreSQL, darei un'occhiata al middleware di pgpool.