PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Python Postgres psycopg2 ThreadedConnectionPool е изчерпан

Борих се да намеря наистина подробна информация за това как работи ThreadedConnectionPool. https://bbengfort.github.io/observations/2017/12/06/psycopg2-transactions.html не е лошо, но се оказва, че твърдението му, че getconn блокира, докато връзката стане достъпна, е неправилно. Проверката на кода, всички добавяни ThreadedConnectionPool е заключване около методите AbstractConnectionPool за предотвратяване на условия на състезание. Ако в даден момент се опитат да се използват повече от maxconn връзки, пулът за връзки е изчерпан PoolError ще бъде повдигнат.

Ако искате нещо малко по-просто от приетия отговор, по-нататъшното обвиване на методите в семафор, осигуряващо блокирането, докато връзката стане налична, трябва да свърши работа:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да променя порта за слушане на postgresql в windows?

  2. Мигриране на PostgreSQL бази данни от On-Prem към облака с помощта на AWS RDS

  3. psycopg2.OperationalError:ФАТАЛНО:неподдържан интерфейсен протокол 1234.5679:сървърът поддържа от 2.0 до 3.0

  4. PostgreSQL:Автоматично увеличаване на базата на уникално ограничение за няколко колони

  5. Общ преглед на PostgreSQL кеширане на заявки и балансиране на натоварването