Fix for waitall with nothing running

This commit is contained in:
Gregory Holt
2010-01-26 18:47:16 +00:00
parent af59d5cc4d
commit f45922a26d
2 changed files with 9 additions and 3 deletions

View File

@@ -119,7 +119,8 @@ class GreenPool(object):
def waitall(self):
"""Waits until all greenthreads in the pool are finished working."""
self.no_coros_running.wait()
if self.running():
self.no_coros_running.wait()
def _spawn_done(self, coro):
self.sem.release()
@@ -228,4 +229,4 @@ class GreenMap(GreenPile):
try:
return self.waiters.get().wait()
finally:
self.counter -= 1
self.counter -= 1

View File

@@ -297,6 +297,11 @@ class GreenPool(tests.LimitedTestCase):
p = greenpool.GreenPool(4)
result_list = list(p.starmap(passthru, [(x,) for x in xrange(10)]))
self.assertEquals(result_list, range(10))
def test_waitall_on_nothing(self):
p = greenpool.GreenPool()
p.waitall()
class GreenPile(tests.LimitedTestCase):
def test_pile(self):
@@ -454,4 +459,4 @@ class Stress(tests.LimitedTestCase):
subtest(50, 75, 100)
for isize in (10, 20, 30, 40, 50):
for psize in (5, 25, 35, 50):
subtest(isize, psize, psize)
subtest(isize, psize, psize)