py3k - None is not comparable in 3.x, also queue.resize(None) was not waking queued putters

This commit is contained in:
amajorek
2010-03-07 04:20:35 -05:00
parent 0bd08f5985
commit 01c37d5cb2
2 changed files with 19 additions and 4 deletions

View File

@@ -140,7 +140,7 @@ class LightQueue(object):
""" """
def __init__(self, maxsize=None): def __init__(self, maxsize=None):
if maxsize < 0: if maxsize is None or maxsize < 0: #None is not comparable in 3.x
self.maxsize = None self.maxsize = None
else: else:
self.maxsize = maxsize self.maxsize = maxsize
@@ -186,7 +186,7 @@ class LightQueue(object):
"""Resizes the queue's maximum size. """Resizes the queue's maximum size.
If the size is increased, and there are putters waiting, they may be woken up.""" If the size is increased, and there are putters waiting, they may be woken up."""
if size > self.maxsize: if self.maxsize is not None and (size is None or size > self.maxsize): # None is not comparable in 3.x
# Maybe wake some stuff up # Maybe wake some stuff up
self._schedule_unlock() self._schedule_unlock()
self.maxsize = size self.maxsize = size
@@ -210,7 +210,7 @@ class LightQueue(object):
``Queue(None)`` is never full. ``Queue(None)`` is never full.
""" """
return self.qsize() >= self.maxsize return self.maxsize is not None and self.qsize() >= self.maxsize # None is not comparable in 3.x
def put(self, item, block=True, timeout=None): def put(self, item, block=True, timeout=None):
"""Put an item into the queue. """Put an item into the queue.
@@ -335,7 +335,7 @@ class LightQueue(object):
putter.switch(putter) putter.switch(putter)
else: else:
self.putters.add(putter) self.putters.add(putter)
elif self.putters and (self.getters or self.qsize() < self.maxsize): elif self.putters and (self.getters or self.maxsize is None or self.qsize() < self.maxsize):
putter = self.putters.pop() putter = self.putters.pop()
putter.switch(putter) putter.switch(putter)
else: else:

View File

@@ -95,6 +95,21 @@ class TestQueue(LimitedTestCase):
eventlet.sleep(0) eventlet.sleep(0)
self.assertEquals(list(q.queue), range(5)) self.assertEquals(list(q.queue), range(5))
def test_resize_to_Unlimited(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()
self.assertFalse(evt.ready())
q.resize(None)
eventlet.sleep()
self.assertTrue(evt.ready())
gt.wait()
def test_multiple_waiters(self): def test_multiple_waiters(self):
# tests that multiple waiters get their results back # tests that multiple waiters get their results back
q = eventlet.Queue() q = eventlet.Queue()