如何在类似于future对象的__await__方法内等待?
- 论坛
- 如何在类似于future对象的__await__方法内等待?
9 浏览
如何在类似于future对象的__await__方法内等待?
PEP 0492添加了新的`__await__`魔法方法。实现了这个方法的对象将成为类似于future的对象,并可以使用`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() # 这是类型错误 await new_sleep() # 这是语法错误 print('ok')
我该如何解决这个问题?