MST

星途 面试题库

面试题:Python网络编程中的异步I/O处理

在Python中,使用asyncio库实现一个异步的HTTP客户端,该客户端能同时发起多个HTTP GET请求,并在所有请求完成后,按请求发起的顺序输出每个请求的响应状态码和响应内容长度。
43.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
import asyncio
import aiohttp


async def fetch(session, url):
    async with session.get(url) as response:
        content = await response.text()
        return response.status, len(content)


async def fetch_all(urls):
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(session, url) for url in urls]
        results = await asyncio.gather(*tasks)
        for status, length in results:
            print(f"状态码: {status}, 响应内容长度: {length}")


if __name__ == "__main__":
    urls = [
        'http://example.com',
        'http://example.org',
        'http://example.net'
    ]
    asyncio.run(fetch_all(urls))

上述代码首先定义了一个fetch函数,用于发起单个HTTP GET请求并返回响应状态码和响应内容长度。fetch_all函数则负责创建aiohttp.ClientSession,并为每个URL创建一个fetch任务,使用asyncio.gather等待所有任务完成,最后按顺序输出每个请求的响应状态码和响应内容长度。在if __name__ == "__main__"块中,定义了一组URL并调用fetch_all函数来执行异步请求。