summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-11-21 03:14:28 +0100
committerVictor Stinner <victor.stinner@gmail.com>2014-11-21 03:14:28 +0100
commit41b8990ce7c27581b6dc48938723321ef6259eb9 (patch)
treec18c253b668d62eef478369c76ae7403d6cc3966 /tests
parent3df5acc6a83711473c45d4ec56b27b2daeb89bd6 (diff)
downloadaioeventlet-41b8990ce7c27581b6dc48938723321ef6259eb9.tar.gz
example to chain a task with a coroutine
Diffstat (limited to 'tests')
-rw-r--r--tests/test_eventlet.py78
1 files changed, 70 insertions, 8 deletions
diff --git a/tests/test_eventlet.py b/tests/test_eventlet.py
index 24c23f5..4d5f019 100644
--- a/tests/test_eventlet.py
+++ b/tests/test_eventlet.py
@@ -1,12 +1,12 @@
import eventlet
import tests
-def slow_append(result, value, delay):
+def eventlet_slow_append(result, value, delay):
eventlet.sleep(delay)
result.append(value)
return value * 10
-def slow_error(delay):
+def eventlet_slow_error(delay):
eventlet.sleep(delay)
raise ValueError("error")
@@ -37,16 +37,16 @@ try:
result = []
loop = asyncio.get_event_loop()
- g1 = eventlet.spawn(slow_append, result, 1, 0.2)
+ g1 = eventlet.spawn(eventlet_slow_append, result, 1, 0.2)
value = yield from wait_greenthread(g1, loop=loop)
result.append(value)
- g2 = eventlet.spawn(slow_append, result, 2, 0.1)
+ g2 = eventlet.spawn(eventlet_slow_append, result, 2, 0.1)
value = yield from wait_greenthread(g2, loop=loop)
result.append(value)
- g3 = eventlet.spawn(slow_error, 0.001)
+ g3 = eventlet.spawn(eventlet_slow_error, 0.001)
try:
yield from wait_greenthread(g3, loop=loop)
except ValueError as exc:
@@ -54,6 +54,17 @@ try:
result.append(4)
return result
+
+ @asyncio.coroutine
+ def coro_slow_append(result, value, delay):
+ yield from asyncio.sleep(delay)
+ result.append(value)
+ return value * 10
+
+ @asyncio.coroutine
+ def coro_slow_error(delay):
+ yield from asyncio.sleep(delay)
+ raise ValueError("error")
''')
except ImportError:
import trollius as asyncio
@@ -82,16 +93,16 @@ except ImportError:
result = []
loop = asyncio.get_event_loop()
- g1 = eventlet.spawn(slow_append, result, 1, 0.2)
+ g1 = eventlet.spawn(eventlet_slow_append, result, 1, 0.2)
value = yield From(wait_greenthread(g1, loop=loop))
result.append(value)
- g2 = eventlet.spawn(slow_append, result, 2, 0.1)
+ g2 = eventlet.spawn(eventlet_slow_append, result, 2, 0.1)
value = yield From(wait_greenthread(g2, loop=loop))
result.append(value)
- g3 = eventlet.spawn(slow_error, 0.001)
+ g3 = eventlet.spawn(eventlet_slow_error, 0.001)
try:
yield From(wait_greenthread(g3, loop=loop))
except ValueError as exc:
@@ -100,6 +111,51 @@ except ImportError:
result.append(4)
raise Return(result)
+ @asyncio.coroutine
+ def coro_slow_append(result, value, delay):
+ yield From(asyncio.sleep(delay))
+ result.append(value)
+ raise Return(value * 10)
+
+ @asyncio.coroutine
+ def coro_slow_error(delay):
+ yield From(asyncio.sleep(delay))
+ raise ValueError("error")
+
+
+def wait_task(task):
+ event = eventlet.event.Event()
+ def done(fut):
+ try:
+ result = fut.result()
+ except Exception as exc:
+ # FIXME
+ event.send_exception(exc)
+ else:
+ event.send(result)
+
+ task.add_done_callback(done)
+ return event.wait()
+
+def greenthread_chain_coro(result, loop):
+ t1 = loop.create_task(coro_slow_append(result, 1, 0.2))
+ value = wait_task(t1)
+ result.append(value)
+
+ t2 = loop.create_task(coro_slow_append(result, 2, 0.1))
+ value = wait_task(t2)
+ result.append(value)
+
+ t3 = loop.create_task(coro_slow_error(0.001))
+ try:
+ value = wait_task(t3)
+ except ValueError as exc:
+ result.append(str(exc))
+
+ result.append(4)
+ loop.call_soon(loop.stop)
+ return result
+
class EventletTests(tests.TestCase):
def test_stop(self):
@@ -148,6 +204,12 @@ class EventletTests(tests.TestCase):
result = self.loop.run_until_complete(coro_chain_greenthread())
self.assertEqual(result, [1, 10, 2, 20, 'error', 4])
+ def test_greenthread_chain_coro(self):
+ result = []
+ self.loop.call_soon(eventlet.spawn, greenthread_chain_coro, result, self.loop)
+ self.loop.run_forever()
+ self.assertEqual(result, [1, 10, 2, 20, 'error', 4])
+
if __name__ == '__main__':
import unittest