Fix a bug

This commit is contained in:
donovan
2008-05-30 13:14:19 -07:00
parent 65c09922e6
commit e3c6528772
2 changed files with 20 additions and 8 deletions

View File

@@ -295,6 +295,7 @@ class CoroutinePool(pools.Pool):
if self._next_event is None:
self._tracked_events.append(result)
else:
ne = self._next_event
self._next_event = None
ne.send(result)
@@ -375,12 +376,17 @@ class CoroutinePool(pools.Pool):
"""
assert self._tracked_events is not None, (
"Must pass track_events=True to the constructor to use CoroutinePool.wait()")
if self._next_event is None:
result = self._tracked_events.pop(0)
if not self._tracked_events:
self._next_event = event()
return result
return self._next_event.wait()
if self._next_event is not None:
return self._next_event.wait()
if not self._tracked_events:
self._next_event = event()
return self._next_event.wait()
result = self._tracked_events.pop(0)
if not self._tracked_events:
self._next_event = event()
return result
def killall(self):
for g in self._greenlets:

View File

@@ -212,10 +212,16 @@ class TestCoroutinePool(tests.TestCase):
pool = coros.CoroutinePool(track_events=True)
for x in range(6):
pool.execute(lambda n: n, x)
t = api.exc_after(10, RuntimeError)
for y in range(6):
pool.wait()
t.cancel()
def test_track_slow_event(self):
pool = coros.CoroutinePool(track_events=True)
def slow():
api.sleep(0.1)
return 'ok'
pool.execute(slow)
self.assertEquals(pool.wait(), 'ok')
class IncrActor(coros.Actor):