作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
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')
我该如何解决?
最佳答案
使用直接 __await__()
调用:
async def new_sleep():
await asyncio.sleep(2)
class Waiting:
def __await__(self):
return new_sleep().__await__()
Yury Selivanov(PEP 492 的作者)为 aioodbc library 推荐了该解决方案。
关于python - 如何在类似 future 的对象的 __await__ 中等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33409888/
我想实现一个可等待的对象,并注意到__await__“需要”成为一个生成器。 来自PEP-492 : An object with an __await__ method returning an i
PEP 0492添加新的 __await__ 魔术方法。实现这个方法的对象变成了future-like object,可以使用await来等待。很清楚: import asyncio class Wa
我是一名优秀的程序员,十分优秀!