PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Python Postgres psycopg2 ThreadedConnectionPool habis

Saya telah berjuang untuk menemukan informasi yang sangat rinci tentang cara kerja ThreadedConnectionPool. https://bbengfort.github.io/observations/2017/12/06/psycopg2-transactions.html tidak buruk, tetapi ternyata klaimnya bahwa getconn memblokir hingga koneksi tersedia tidak benar. Memeriksa kode, semua yang ditambahkan ThreadedConnectionPool adalah kunci di sekitar metode AbstractConnectionPool untuk mencegah kondisi balapan. Jika lebih dari koneksi maxconn dicoba digunakan pada titik mana pun, kumpulan koneksi habis PoolError akan dimunculkan.

Jika Anda menginginkan sesuatu yang sedikit lebih sederhana daripada jawaban yang diterima, lebih lanjut membungkus metode dalam Semaphore yang menyediakan pemblokiran hingga koneksi tersedia harus melakukan trik:

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. Mode postgresql H2 sepertinya tidak berfungsi untuk saya

  2. Cara Menggunakan Fungsi Substring di PostgreSQL dan Redshift

  3. Mengapa urutan id SQL tidak sinkron (khususnya menggunakan Postgres)?

  4. Bagaimana cara mengimpor data file CSV ke tabel PostgreSQL?

  5. Batasan nama kolom tabel Postgres?