以下是使用asyncio和aiohttp解决并发IO和休眠重叠的示例代码:
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
tasks = []
urls = ['http://example.com', 'http://example.org', 'http://example.net']
for url in urls:
task = asyncio.create_task(fetch(session, url))
tasks.append(task)
# 并行发送请求
responses = await asyncio.gather(*tasks)
# 休眠1秒
await asyncio.sleep(1)
# 打印响应内容
for response in responses:
print(response)
asyncio.run(main())
在上面的代码中,首先创建一个fetch
函数,使用aiohttp库发送HTTP请求并返回响应内容。然后,在main
函数中创建一个ClientSession
,并使用create_task
创建任务列表,将每个请求都加入到任务列表中。然后,使用asyncio.gather
并行发送所有的请求,并将响应结果保存在一个列表中。
接下来,使用asyncio.sleep
函数进行1秒的休眠。最后,打印出每个请求的响应内容。
通过使用asyncio
和aiohttp
库,我们可以实现并发的IO操作,并与休眠重叠。