PEP 0492增加了新的__await__
魔法法.实现此方法的对象变为future-like object,可以使用await
等待.很明显:
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())
好的,但是如果我想调用async def
个定义函数而不是asyncio.sleep
个呢?我不能使用await
,因为__await__
不是async
函数,我不能使用yield from
,因为本机协程需要await
表达式:
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')
我该怎么解决呢?