Loading

aiohttp异步网络请求

下载

pip install aiohttp

示例

import aiohttp
import asyncio

urls = [
    'https://cdn.pixabay.com/photo/2018/01/14/23/12/nature-3082832_640.jpg',
    'https://cdn.pixabay.com/photo/2024/11/26/18/50/skyscraper-9226515_640.jpg',
    'https://cdn.pixabay.com/photo/2024/12/13/21/21/eye-9266169_640.jpg'
]


async def download(url):
    # request.get(url)
    name = url.rsplit("/", 1)[-1]
    async with aiohttp.ClientSession() as session:
        # session.get(url)发送一个异步的 HTTP GET 请求到指定的 URL。
        # 这会立即返回一个可等待的对象(在这个例子中是resp),而不会阻塞程序的执行。
        async with session.get(url) as resp:
            # 写入是同步操作,想异步可学习aiofiles模块
            with open(name, "wb") as f:
                f.write(await resp.content.read())  # resp.text()

    print("写入完成!")


async def main():
    task_list = []
    for url in urls:
        task_list.append(asyncio.create_task(download(url)))

    # await asyncio.wait(task_list)
    await asyncio.gather(*task_list)


if __name__ == '__main__':
    # asyncio.run(main())  # 报错应该是和版本不同有关  RuntimeError: Event loop is closed

    # 换成以下代码  ok!解决
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())  
posted @ 2024-12-21 12:47  一只大学生  阅读(25)  评论(0)    收藏  举报