PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पायथन पोस्टग्रेज psycopg2 थ्रेडेडकनेक्शनपूल समाप्त हो गया

मैंने थ्रेडेडकनेक्शनपूल कैसे काम करता है, इस बारे में वास्तव में विस्तृत जानकारी प्राप्त करने के लिए संघर्ष किया है। https://bbengfort.github.io/observations/2017/12/06/psycopg2-transactions.html खराब नहीं है, लेकिन यह पता चला है कि कनेक्शन उपलब्ध होने तक getconn ब्लॉक करने का उसका दावा गलत है। कोड की जाँच करते हुए, सभी ThreadedConnectionPool जोड़ता है, दौड़ की स्थिति को रोकने के लिए AbstractConnectionPool विधियों के आसपास एक लॉक है। यदि किसी भी बिंदु पर मैक्सकॉन से अधिक कनेक्शन का उपयोग करने का प्रयास किया जाता है, तो कनेक्शन पूल समाप्त हो जाता है 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. कॉपी कैसे काम करती है और यह INSERT से इतनी तेज क्यों है?

  2. कई तालिकाओं में से एक के लिए विदेशी कुंजी?

  3. Psql सर्वर से कनेक्ट नहीं हो सका:ऐसी कोई फ़ाइल या निर्देशिका नहीं, 5432 त्रुटि?

  4. Postgres से SQL Server 2008 में माइग्रेट करना

  5. पोस्टग्रेज:वैक्यूम कमांड मृत टुपल्स को साफ नहीं करता है