From fe85cca848735d4f81e41810090e6a1f6941cae6 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sat, 3 May 2014 23:20:22 +0300 Subject: [PATCH] asyncio_micro: Add support for starting a coroutine concurrently. Just yield it as a value. Also, improve logging/error reporting. --- asyncio_micro/asyncio_micro.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/asyncio_micro/asyncio_micro.py b/asyncio_micro/asyncio_micro.py index 5ae10ea4..de182b22 100644 --- a/asyncio_micro/asyncio_micro.py +++ b/asyncio_micro/asyncio_micro.py @@ -10,6 +10,7 @@ log = logging.getLogger("asyncio") IO_READ = 1 IO_WRITE = 2 +type_gen = type((lambda: (yield))()) class EventLoop: @@ -60,9 +61,9 @@ class EventLoop: try: if args == (): args = (None,) - log.debug("Gen send args: %s", args) + log.debug("Gen %s send args: %s", cb, args) ret = cb.send(*args) - log.debug("Gen yield result: %s", ret) + log.debug("Gen %s yield result: %s", cb, ret) if isinstance(ret, SysCall): if isinstance(ret, Sleep): delay = ret.args[0] @@ -79,6 +80,11 @@ class EventLoop: self.remove_reader(ret.obj.fileno()) elif ret.op == IO_WRITE: self.remove_writer(ret.obj.fileno()) + elif isinstance(ret, type_gen): + self.call_soon(ret) + else: + print(ret, type(ret)) + assert False except StopIteration as e: log.debug("Gen finished: %s", cb) continue