如何异步迭代一个范围

2024-05-16 16:01:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3.6中,如果我想迭代一个范围,我可以简单地这样做

for i in range(100): pass

但是,如果我想异步迭代一个范围,我应该怎么做?我做不到

^{pr2}$

因为range不是AsyncIterable对象。我可以考虑的一个解决方案是将range子类化并定义__aiter__方法。不过,对我来说,它真的不是Python。在不定义自己的类的情况下,有什么好的方法/库来实现这一点吗?在


Tags: 对象方法infor定义情况rangepass
2条回答

这应该做到:

async def myrange(start, stop=None, step=1):
    if stop:
        range_ = range(start, stop, step)
    else:
        range_ = range(start)
    for i in range_:
        yield i
        await asyncio.sleep(0)

https://www.python.org/dev/peps/pep-0525/#asynchronous-generator-object

可以改用range()的示例函数:

async def arange(count):
    for i in range(count):
        yield(i)

相关问题 更多 >