要实现“不同的HTTP调用,等待同一个任务”的解决方法,可以使用异步编程模型和协程来处理。
在Python中,可以使用asyncio
库来实现异步编程,结合aiohttp
库来处理HTTP请求。
下面是一个使用asyncio
和aiohttp
的示例代码:
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
urls = [
'http://example.com/page1',
'http://example.com/page2',
'http://example.com/page3'
]
tasks = []
async with aiohttp.ClientSession() as session:
for url in urls:
task = asyncio.create_task(fetch(session, url))
tasks.append(task)
# 等待所有任务完成
responses = await asyncio.gather(*tasks)
for response in responses:
print(response)
asyncio.run(main())
在上面的示例中,fetch
函数用于发送HTTP请求并返回响应内容。main
函数是异步的入口函数,其中定义了要请求的URL列表和一个空的任务列表。然后使用aiohttp.ClientSession
创建一个会话对象,循环遍历URL列表,为每个URL创建一个异步任务,并将任务添加到任务列表中。
最后,使用asyncio.gather
函数等待所有任务完成,并将响应列表赋值给responses
变量。最后,可以遍历responses
列表来处理每个响应。
使用上面的代码,可以同时发起多个HTTP请求,并等待所有请求完成后再进行处理。