summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util/queue.py
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2018-09-18 23:29:34 -0400
committerGerrit Code Review <gerrit@ci.zzzcomputing.com>2018-09-18 23:29:34 -0400
commit5981e4328193bd760c4e2b28fdb8451f0f55c4ea (patch)
treee2704e20fa414f3e8ababdfad9b9f919021881e9 /lib/sqlalchemy/util/queue.py
parent505941259e4e7181a176e74b3de0b7d96c444e29 (diff)
parentb64a3dd87a4204ce6d4f2793a7a3f7fbf72eb01f (diff)
downloadsqlalchemy-5981e4328193bd760c4e2b28fdb8451f0f55c4ea.tar.gz
Merge "Add LIFO for connection pooling"
Diffstat (limited to 'lib/sqlalchemy/util/queue.py')
-rw-r--r--lib/sqlalchemy/util/queue.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/sqlalchemy/util/queue.py b/lib/sqlalchemy/util/queue.py
index 1958702c7..640f70ea9 100644
--- a/lib/sqlalchemy/util/queue.py
+++ b/lib/sqlalchemy/util/queue.py
@@ -39,10 +39,12 @@ class Full(Exception):
class Queue:
- def __init__(self, maxsize=0):
+ def __init__(self, maxsize=0, use_lifo=False):
"""Initialize a queue object with a given maximum size.
If `maxsize` is <= 0, the queue size is infinite.
+
+ If `use_lifo` is True, this Queue acts like a Stack (LIFO).
"""
self._init(maxsize)
@@ -57,6 +59,8 @@ class Queue:
# Notify not_full whenever an item is removed from the queue;
# a thread waiting to put is notified then.
self.not_full = threading.Condition(self.mutex)
+ # If this queue uses LIFO or FIFO
+ self.use_lifo = use_lifo
def qsize(self):
"""Return the approximate size of the queue (not reliable!)."""
@@ -196,4 +200,9 @@ class Queue:
# Get an item from the queue
def _get(self):
- return self.queue.popleft()
+ if self.use_lifo:
+ # LIFO
+ return self.queue.pop()
+ else:
+ # FIFO
+ return self.queue.popleft()