Bug 37: Implement queue resizing
This commit is contained in:
@@ -182,6 +182,15 @@ class LightQueue(object):
|
||||
"""Return the size of the queue."""
|
||||
return len(self.queue)
|
||||
|
||||
def resize(self, size):
|
||||
"""Resizes the queue's maximum size.
|
||||
|
||||
If the size is increased, and there are putters waiting, they may be woken up."""
|
||||
if size > self.maxsize:
|
||||
# Maybe wake some stuff up
|
||||
self._schedule_unlock()
|
||||
self.maxsize = size
|
||||
|
||||
def putting(self):
|
||||
"""Returns the number of greenthreads that are blocked waiting to put
|
||||
items into the queue."""
|
||||
|
@@ -68,6 +68,33 @@ class TestQueue(LimitedTestCase):
|
||||
self.assertEquals(evt.wait(),'done')
|
||||
gt.wait()
|
||||
|
||||
def test_resize_up(self):
|
||||
q = eventlet.Queue(0)
|
||||
def sender(evt, q):
|
||||
q.put('hi')
|
||||
evt.send('done')
|
||||
|
||||
evt = event.Event()
|
||||
gt = eventlet.spawn(sender, evt, q)
|
||||
eventlet.sleep(0)
|
||||
self.assert_(not evt.ready())
|
||||
q.resize(1)
|
||||
eventlet.sleep(0)
|
||||
self.assert_(evt.ready())
|
||||
gt.wait()
|
||||
|
||||
def test_resize_down(self):
|
||||
size = 5
|
||||
q = eventlet.Queue(5)
|
||||
|
||||
for i in range(5):
|
||||
q.put(i)
|
||||
|
||||
self.assertEquals(list(q.queue), range(5))
|
||||
q.resize(1)
|
||||
eventlet.sleep(0)
|
||||
self.assertEquals(list(q.queue), range(5))
|
||||
|
||||
def test_multiple_waiters(self):
|
||||
# tests that multiple waiters get their results back
|
||||
q = eventlet.Queue()
|
||||
|
Reference in New Issue
Block a user