PEP 0492 adds new __await__
magic method. Object that implements this method becomes future-like object and can be awaited using await
. It's clear:
import asyncio
class Waiting:
def __await__(self):
yield from asyncio.sleep(2)
print('ok')
async def main():
await Waiting()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Ok, but what if I want to call some async def
defined function instead of asyncio.sleep
? I can't use await
because __await__
is not async
function, I can't use yield from
because native coroutines requires await
expression:
async def new_sleep():
await asyncio.sleep(2)
class Waiting:
def __await__(self):
yield from new_sleep() # this is TypeError
await new_sleep() # this is SyntaxError
print('ok')
How can I solve it?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…