From 622eebc5dffa3ca2957bbeb11f2570efb9120c15 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Fri, 14 Aug 2009 17:18:56 -0700 Subject: [PATCH] Added waiting method back to pool.Pool that was lost, plus a unit test so it doesn't get lost again. --- eventlet/pool.py | 8 ++++++++ tests/test__pool.py | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/eventlet/pool.py b/eventlet/pool.py index cf537eb..9648421 100644 --- a/eventlet/pool.py +++ b/eventlet/pool.py @@ -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.""" diff --git a/tests/test__pool.py b/tests/test__pool.py index de515cf..7b56a82 100644 --- a/tests/test__pool.py +++ b/tests/test__pool.py @@ -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()