sql >> Database >  >> RDS >> PostgreSQL

Django ORM gebruiken in threads en te veel uitzonderingen voor clients vermijden door BoundedSemaphore te gebruiken

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.




  1. Hoe MySQL-query's te optimaliseren op basis van het EXPLAIN-plan?

  2. Laravel berekent de som van twee kolommen met een voorwaarde

  3. Hoe MySQL-database te herstellen van .myd-, .myi-, .frm-bestanden

  4. Hoe Django te laten werken met niet-ondersteunde MySQL-stuurprogramma's zoals gevent-mysql of het MySQL-stuurprogramma van Concurrence?