当前位置: 首页 > 面试题库 >

我如何在类似未来的对象的__await__中等待?

太叔英卫
2023-03-14
问题内容

PEP 0492添加了新的__await__魔术方法。实现此方法的对象将成为 将来的对象 ,可以使用来等待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库



 类似资料:
  • 问题内容: 信封:Akka 2.1,scala版本2.10.M6,JDK 1.7,u5 现在是我的问题:我有: 现在在第一行中,我有一个Future对象的Future,有什么方法可以在不阻塞当前线程的情况下将其转换为Future? Akka有什么方法吗?据我检查,我还没有发现…第一次发帖....不好意思的格式和组织…:〜P 问题答案: 简短答案(英语):flatMap dat sh!t 较短的答案

  • 问题内容: 我想知道jQuery如何构造其类似数组的对象。我试图解决的关键问题是如何设法使控制台将其解释为数组并将其显示为数组。我知道它与length属性有关,但是在玩了一点之后我还是不太清楚。 我知道,与普通的数组(如下面的示例)相比,它没有技术优势。但是我认为这是用户进行测试和调试时的重要语义元素。 像对象一样的普通数组。 jQuery输出的位置 如果你跑 jQuery对象的原型特别有趣,因为

  • 是否有一种方法可以在不阻塞事件循环的情况下等待一个未来完成? 我知道这个错误通常意味着什么,但我不知道在这种情况下...我试图在谷歌上搜索它,但没有找到任何关于将哪份清单放在哪里的明确解释。和以前一样,除非是强制性的,我更喜欢一次学一件事。 那么,回到这个问题:“基本”Vert.x是否有一种方法可以在事件循环不受干扰的情况下等待未来?

  • 我是java编程的初学者,主要是javascript开发人员。我有一个js数组, 如何在Java中构造相同的结构?

  • 我通过学校为一项任务提供的简报创建了一个飞机座位预订系统。我遇到了一个我无法解决的主要问题。 摘要说明抽象类必须有一个抽象方法和大约4个公共方法。在抽象类的两个子类中,我们都必须初始化对象数组(所有普通的座位)。然而,一旦它们被初始化,我不知道如何将它们发送回抽象类(该类有一个检查未预订的飞机座位的方法,这就是我需要初始化的座位对象的地方) ArrayIndexOutOfBounds在一个应该在边

  • 我们有这节课 假设我们不知道InnerObject中有多少个对象,我们如何以最佳方式手动迭代该对象?主要的问题将在内部列表上,因为它可能还有另一个列表,另一个和另一个,等等。。。