PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utiliser Django ORM dans les threads et éviter trop d'exceptions clients en utilisant BoundedSemaphore

L'ORM de Django gère les connexions à la base de données dans des variables locales de thread. Ainsi, chaque thread différent accédant à l'ORM créera sa propre connexion. Vous pouvez le voir dans les premières lignes de django/db/backends/__init__.py .

Si vous souhaitez limiter le nombre de connexions à la base de données effectuées, vous devez limiter le nombre de threads différents qui accèdent réellement à l'ORM. Une solution pourrait consister à implémenter un service qui délègue les requêtes ORM à un pool de threads ORM dédiés. Pour transmettre les requêtes et leurs résultats depuis et vers d'autres threads, vous devrez implémenter une sorte de mécanisme de transmission de messages. Puisqu'il s'agit d'un problème typique de producteur/consommateur, la documentation Python sur le threading devrait donner quelques conseils pour y parvenir.

Modifier : Je viens de chercher sur Google "regroupement de connexions django". De nombreuses personnes se plaignent que Django ne fournit pas un pool de connexion approprié. Certains d'entre eux ont réussi à intégrer un package de mutualisation séparé. Pour PostgreSQL, je jetterais un œil au middleware pgpool.