Python3线程还是aiohttp?

时间:2019-08-06 19:19:55

标签: python multithreading asynchronous python-requests aiohttp

我想创建一个程序,该程序可以获取100多个网页并返回其内容。我现在可以使用简单的python脚本来做到这一点:

pip uninstall mpi4py
pip install --no-cache-dir mpi4py

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

1 个答案:

答案 0 :(得分:1)

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()