Python3 线程还是 aiohttp?

Python3 threads or aiohttp?

我想创建一个程序,可以获取 100 个网页和 return 它们的内容。我现在可以用一个简单的 python 脚本来做到这一点:

import requests

urls = [...]
data = []
for url in urls:
    content = requests.get(url).content
    data.append(content)

然而,上述实现的缺点是在 for 循环中,必须在对下一个 url 发出请求之前加载内容。我想做的是避免这种情况。我想为每个 url 发出一个请求,但不必等待加载当前 url 的内容完成。我怎样才能做到这一点?我已经阅读了 aiohttp 和线程,但我不确定什么是最好的方法。

asyncio + aiohttp 是一个很好的组合,可以显着提高性能:

实施示例:

import asyncio
import aiohttp


async def fetch(url):
    async with aiohttp.ClientSession() as session:
        resp = await session.get(url)
        content = await resp.text()
        return content 


async def main():
    urls = [...]
    webpages = await asyncio.gather(*[fetch(url) for url in urls])
    # use webpages for further processing


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()