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

Python Postgres psycopg2 ThreadedConnectionPool opbrugt

Jeg har kæmpet for at finde virkelig detaljerede oplysninger om, hvordan ThreadedConnectionPool fungerer. https://bbengfort.github.io/observations/2017/12/06/psycopg2-transactions.html er ikke dårligt, men det viser sig, at dets påstand om, at getconn blokerer, indtil en forbindelse bliver tilgængelig, er forkert. Når du tjekker koden, er alt, hvad ThreadedConnectionPool tilføjer, en lås omkring AbstractConnectionPool-metoderne for at forhindre løbsforhold. Hvis der forsøges brugt mere end maxconn-forbindelser på noget tidspunkt, er forbindelsespuljen opbrugt PoolError vil blive rejst.

Hvis du vil have noget, der er lidt enklere end det accepterede svar, bør det gøre tricket at pakke metoderne ind i en Semaphore, der giver blokeringen, indtil en forbindelse bliver tilgængelig:

from psycopg2.pool import ThreadedConnectionPool
from threading import Semaphore

class ReallyThreadedConnectionPool(ThreadedConnectionPool):
    def __init__(self, minconn, maxconn, *args, **kwargs):
        self._semaphore = Semaphore(maxconn)
        super().__init__(minconn, maxconn, *args, **kwargs)

    def getconn(self, *args, **kwargs):
        self._semaphore.acquire()
        return super().getconn(*args, **kwargs)

    def putconn(self, *args, **kwargs):
        super().putconn(*args, **kwargs)
        self._semaphore.release()


  1. Eksempler på PLSQL-markører - eksplicitte, implicitte og referencemarkører

  2. Sådan klones en bruger i Oracle

  3. 6 måder at tjekke din MariaDB-version på

  4. System til nulstilling af adgangskode i PHP