所以我需要为列表中的所有项目调用async函数.这可能是一个URL列表和一个异步函数,使用aiohttp从每个URL返回响应.显然,我无法做到以下几点:

async for url in ['www.google.com', 'www.youtube.com', 'www.aol.com']:

我可以使用普通的for循环,但我的代码将同步运行,我失go 了async响应获取函数的优势和速度.

我有没有办法转换一个列表,使上面的工作?我只需要把列表的__iter__()改成__aiter__(),对吗?这可以通过对列表进行子类化来实现吗?也许把它封装在一个类中?

推荐答案

使用asyncio.as_completed:

for future in asyncio.as_completed(map(fetch, urls)):
    result = await future

asyncio.gather:

results = await asyncio.gather(map(fetch, urls))

EDIT:如果你不介意外部依赖,你可以使用aiostream.stream.map:

from aiostream import stream, pipe

async def fetch_many(urls):
    xs = stream.iterate(urls) | pipe.map(fetch, ordered=True, task_limit=10)
    async for result in xs:
        print(result)

您可以使用task_limit参数控制并发运行的fetch个协同程序的数量,并 Select 是按顺序获得结果,还是尽快获得结果.

请参阅本demonstrationdocumentation中的更多示例.

免责声明:我是项目维护者

Python-3.x相关问答推荐

S的两极是什么,相当于大Pandas 的`.ilo‘方法?

如何获得大Pandas 的常见时间间隔

正确的本地react 方式-Django身份验证

regexp多重前瞻行为的解释

给定panda代码的分组和百分比分布pyspark等价

向前/向后移动导致移动行的数据不可见

汉明距离:涉及按位运算的逻辑步骤不清楚

匹配语句NaN

使用Python按照其组/ID的紧密值的递增顺序映射数据框的两列

Pandas:从 Pandas 数据框中的 1 和 0 模式中获取值和 ID 的计数

如何在 Telethon 中向机器人发送发送表情符号

为什么 Multiprocessing 的 Lock 不会阻止其他进程使用对象?

用于 BIG 数组计算的多处理池映射比预期的要慢

Django 2 个字段之一不能为空

使用 Sympy 方程进行绘图

如何正确创建自定义文本编解码器?

计算两个文件的行差异的最有效方法是什么?

Python 3 - Zip 是 pandas 数据框中的迭代器

使用完整路径激活 conda 环境

如何将python日志(log)级别名称转换为整数代码