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:
@@ -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."""
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user