Fix a bug
This commit is contained in:
@@ -295,6 +295,7 @@ class CoroutinePool(pools.Pool):
|
|||||||
if self._next_event is None:
|
if self._next_event is None:
|
||||||
self._tracked_events.append(result)
|
self._tracked_events.append(result)
|
||||||
else:
|
else:
|
||||||
|
|
||||||
ne = self._next_event
|
ne = self._next_event
|
||||||
self._next_event = None
|
self._next_event = None
|
||||||
ne.send(result)
|
ne.send(result)
|
||||||
@@ -375,12 +376,17 @@ class CoroutinePool(pools.Pool):
|
|||||||
"""
|
"""
|
||||||
assert self._tracked_events is not None, (
|
assert self._tracked_events is not None, (
|
||||||
"Must pass track_events=True to the constructor to use CoroutinePool.wait()")
|
"Must pass track_events=True to the constructor to use CoroutinePool.wait()")
|
||||||
if self._next_event is None:
|
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)
|
result = self._tracked_events.pop(0)
|
||||||
if not self._tracked_events:
|
if not self._tracked_events:
|
||||||
self._next_event = event()
|
self._next_event = event()
|
||||||
return result
|
return result
|
||||||
return self._next_event.wait()
|
|
||||||
|
|
||||||
def killall(self):
|
def killall(self):
|
||||||
for g in self._greenlets:
|
for g in self._greenlets:
|
||||||
|
@@ -212,10 +212,16 @@ class TestCoroutinePool(tests.TestCase):
|
|||||||
pool = coros.CoroutinePool(track_events=True)
|
pool = coros.CoroutinePool(track_events=True)
|
||||||
for x in range(6):
|
for x in range(6):
|
||||||
pool.execute(lambda n: n, x)
|
pool.execute(lambda n: n, x)
|
||||||
t = api.exc_after(10, RuntimeError)
|
|
||||||
for y in range(6):
|
for y in range(6):
|
||||||
pool.wait()
|
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):
|
class IncrActor(coros.Actor):
|
||||||
|
Reference in New Issue
Block a user