实现思路
- 导入
asyncio
和用于HTTP请求的库,如aiohttp
。
- 定义一个函数,用于发起单个HTTP GET请求,并设置超时时间,处理可能的异常。
- 使用
asyncio.gather
并发执行多个请求。
核心代码片段
import asyncio
import aiohttp
async def fetch(session, url, timeout):
try:
async with session.get(url, timeout=timeout) as response:
return await response.text()
except (aiohttp.ClientError, asyncio.TimeoutError) as e:
print(f"请求 {url} 时发生错误: {e}")
return None
async def fetch_all(urls, timeout):
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url, timeout) for url in urls]
results = await asyncio.gather(*tasks)
return results
# 示例使用
urls = ["http://example.com"] * 100
timeout = aiohttp.ClientTimeout(total=10)
loop = asyncio.get_event_loop()
responses = loop.run_until_complete(fetch_all(urls, timeout))