mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-26 02:43:43 +03:00
Various pool changes.
This commit is contained in:
parent
d5f639cfd6
commit
f687f2853e
|
@ -1,3 +1,9 @@
|
||||||
|
2005-10-20 Federico Di Gregorio <fog@initd.org>
|
||||||
|
|
||||||
|
* lib/pool.py: renamed ThreadedConnectionPool to PersistentConnectionPool
|
||||||
|
and added a connection pool that allows multiple connections per thread
|
||||||
|
as ThreadedConnectionPool (courtesy of Daniele Varrazzo.)
|
||||||
|
|
||||||
2005-10-19 Federico Di Gregorio <fog@initd.org>
|
2005-10-19 Federico Di Gregorio <fog@initd.org>
|
||||||
|
|
||||||
* Releasing 2.0 beta 5.
|
* Releasing 2.0 beta 5.
|
||||||
|
|
42
lib/pool.py
42
lib/pool.py
|
@ -136,12 +136,48 @@ class SimpleConnectionPool(AbstractConnectionPool):
|
||||||
|
|
||||||
|
|
||||||
class ThreadedConnectionPool(AbstractConnectionPool):
|
class ThreadedConnectionPool(AbstractConnectionPool):
|
||||||
"""A connection pool that works with the threading module.
|
"""A connection pool that works with the threading module."""
|
||||||
|
|
||||||
|
def __init__(self, minconn, maxconn, *args, **kwargs):
|
||||||
|
"""Initialize the threading lock."""
|
||||||
|
import threading
|
||||||
|
AbstractConnectionPool.__init__(
|
||||||
|
self, minconn, maxconn, *args, **kwargs)
|
||||||
|
self._lock = threading.Lock()
|
||||||
|
|
||||||
|
def getconn(self, key=None):
|
||||||
|
"""Get a free connection and assign it to 'key' if not None."""
|
||||||
|
self._lock.acquire()
|
||||||
|
try:
|
||||||
|
return self._getconn(key)
|
||||||
|
finally:
|
||||||
|
self._lock.release()
|
||||||
|
|
||||||
|
def putconn(self, conn=None, key=None, close=False):
|
||||||
|
"""Put away an unused connection."""
|
||||||
|
self._lock.acquire()
|
||||||
|
try:
|
||||||
|
self._putconn(conn, key, close)
|
||||||
|
finally:
|
||||||
|
self._lock.release()
|
||||||
|
|
||||||
|
def closeall(self):
|
||||||
|
"""Close all connections (even the one currently in use.)"""
|
||||||
|
self._lock.acquire()
|
||||||
|
try:
|
||||||
|
self._closeall()
|
||||||
|
finally:
|
||||||
|
self._lock.release()
|
||||||
|
|
||||||
|
|
||||||
|
class PersistentConnectionPool(AbstractConnectionPool):
|
||||||
|
"""A pool that assigns persistent connections to different threads.
|
||||||
|
|
||||||
Note that this connection pool generates by itself the required keys
|
Note that this connection pool generates by itself the required keys
|
||||||
using the current thread id. This means that untill a thread put away
|
using the current thread id. This means that untill a thread put away
|
||||||
a connection it will always get the same connection object by successive
|
a connection it will always get the same connection object by successive
|
||||||
.getconn() calls.
|
.getconn() calls. This also means that a thread can't use more than one
|
||||||
|
single connection from the pool.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, minconn, maxconn, *args, **kwargs):
|
def __init__(self, minconn, maxconn, *args, **kwargs):
|
||||||
|
@ -176,7 +212,7 @@ class ThreadedConnectionPool(AbstractConnectionPool):
|
||||||
self._lock.release()
|
self._lock.release()
|
||||||
|
|
||||||
def closeall(self):
|
def closeall(self):
|
||||||
"""Close all connections (even the one currently in use."""
|
"""Close all connections (even the one currently in use.)"""
|
||||||
self._lock.acquire()
|
self._lock.acquire()
|
||||||
try:
|
try:
|
||||||
self._closeall()
|
self._closeall()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user