Added waiting method back to pool.Pool that was lost, plus a unit test so it doesn't get lost again.

This commit is contained in:
Ryan Williams
2009-08-14 17:18:56 -07:00
parent b0befa0f32
commit 622eebc5df
2 changed files with 32 additions and 0 deletions

View File

@@ -83,6 +83,14 @@ class Pool(object):
"""Wait for the next execute in the pool to complete,
and return the result."""
return self.results.wait()
def waiting(self):
"""Return the number of coroutines waiting to execute.
"""
if self.sem.balance < 0:
return -self.sem.balance
else:
return 0
def killall(self):
""" Kill every running coroutine as immediately as possible."""

View File

@@ -20,6 +20,30 @@ class TestCoroutinePool(LimitedTestCase):
pool = self.klass(0, 2)
worker = pool.execute(some_work)
self.assertEqual(value, worker.wait())
def test_waiting(self):
pool = self.klass(0,1)
done = coros.event()
def consume():
done.wait()
def waiter(pool):
evt = pool.execute(consume)
evt.wait()
waiters = []
waiters.append(coros.execute(waiter, pool))
api.sleep(0)
self.assertEqual(pool.waiting(), 0)
waiters.append(coros.execute(waiter, pool))
api.sleep(0)
self.assertEqual(pool.waiting(), 1)
waiters.append(coros.execute(waiter, pool))
api.sleep(0)
self.assertEqual(pool.waiting(), 2)
done.send(None)
for w in waiters:
w.wait()
self.assertEqual(pool.waiting(), 0)
def test_multiple_coros(self):
evt = coros.event()