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, """Wait for the next execute in the pool to complete,
and return the result.""" and return the result."""
return self.results.wait() 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): def killall(self):
""" Kill every running coroutine as immediately as possible.""" """ Kill every running coroutine as immediately as possible."""

View File

@@ -20,6 +20,30 @@ class TestCoroutinePool(LimitedTestCase):
pool = self.klass(0, 2) pool = self.klass(0, 2)
worker = pool.execute(some_work) worker = pool.execute(some_work)
self.assertEqual(value, worker.wait()) 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): def test_multiple_coros(self):
evt = coros.event() evt = coros.event()