On Wed, Apr 22, 2015 at 10:24 PM, Yury Selivanov <yselivanov...@gmail.com> wrote: > > > On 2015-04-22 2:53 PM, Andrew Svetlov wrote: >> >> On Wed, Apr 22, 2015 at 9:45 PM, Yury Selivanov <yselivanov...@gmail.com> >> wrote: > > [...] >>> >>> >>>> If we forbid to call `async def` from regualr code how asyncio should >>>> work? I'd like to push `async def` everywhere in asyncio API where >>>> asyncio.coroutine required. >>> >>> >>> You'll have to use a wrapper that will do the following: >>> >>> async def foo(): >>> return 'spam' >>> >>> @asyncio.coroutine >>> def bar(): >>> what = yield from foo.__await__(foo, *args, **kwargs) >>> # OR: >>> what = yield from await_call(foo, *args, **kwargs) >>> >> If I cannot directly use `yield from f()` with `async def f():` then >> almost every `yield from` inside asyncio library should be wrapped in >> `await_call()`. Every third-party asyncio-based library should do the >> same. >> >> Also I expect a performance degradation on `await_call()` calls. >> >
> I think there is another way... instead of pushing > > GET_ITER > ... > YIELD_FROM > > opcodes, we'll need to replace GET_ITER with another one: > > GET_ITER_SPECIAL > ... > YIELD_FROM > > > Where "GET_ITER_SPECIAL (obj)" (just a working name) would check > that if the current code object has CO_COROUTINE and the > object that you will yield-from has it as well, it would > push to the stack the result of (obj.__await__()) > GET_ITER_SPECIAL sounds better than wrapper for `coro.__await__()` call. > Yury -- Thanks, Andrew Svetlov _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com