如何在 python 中创建可等待的值?

问题描述 投票:0回答:1

我有一个

int
,我想让它可以等待,我该怎么做?

Context :我实现了一个异步生成器来生成可等待的对象。但是,它需要等待第一个(而且只有第一个)值,以便它可以产生其他值。

因此,第一个值已经等待,但其他值按原样产生,调用者将等待它们。但是,我不想在调用者中添加 ifawaitable 逻辑,这就是为什么我想让第一个值可等待。

我考虑的第一种方法是创建一个简单的异步身份函数,但我想知道这样的函数是否已经存在? (或者如果有更清洁的方法)

async def make_awaitable(value):
  return value
python asynchronous async-await
1个回答
0
投票

您可以创建自己的包装类,实现 await 方法将整数(或任何其他非等待对象)转换为可等待对象。这种方法应该返回一个能够预期值的迭代器。

下面是它的用法说明:

class AwaitableInt:
    def __init__(self, value):
        self.value = value

    def __await__(self):
        yield self.value

# Usage example
async def my_generator():
    awaitable_int = AwaitableInt(42)
    yield awaitable_int

# You can now iterate over the async generator and await the first value
async def main():
    async for value in my_generator():
        await value
        # Do something with the awaited value

asyncio.run(main())

await 方法,它产生一个迭代器,在迭代时给出值,由 AwaitableInt 类实现,它封装了一个整数。可以在异步函数中使用 this 等待 AwaitableInt 对象。 通过开发具有独特 await 实现的包装类,您可以使用此方法创建任何可等待的非等待对象。 希望这会奏效。

© www.soinside.com 2019 - 2024. All rights reserved.