使用Python的requests_futures.sessions模块发送并发HTTP请求
发布时间:2023-12-25 22:11:37
requests_futures模块是基于requests模块的一个扩展,它提供了一个可以使用并发技术发送HTTP请求的功能。使用requests_futures.sessions模块可以实现对多个URL同时发送请求,并在请求完成后获取响应。
以下是一个使用Python的requests_futures.sessions模块发送并发HTTP请求的示例:
from future.moves import concurrent
import requests
from requests_futures.sessions import FuturesSession
# 创建一个FuturesSession对象
session = FuturesSession()
# 定义一个回调函数来处理并发请求的响应
def handle_response(r, *args, **kwargs):
response = r.response
print(response.status_code)
print(response.text)
# 声明一个列表来保存请求的Future对象
futures = []
# 向多个URL发送GET请求
urls = ['http://www.example.com', 'http://www.google.com', 'http://www.github.com']
for url in urls:
future = session.get(url)
future.add_done_callback(handle_response)
futures.append(future)
# 等待所有请求完成
concurrent.futures.wait(futures)
print("All requests completed!")
在上面的示例中,首先从future.moves模块导入concurrent,然后导入requests和FuturesSession。然后,我们创建一个FuturesSession对象,该对象允许我们发送异步请求。
接下来,我们定义了一个回调函数handle_response来处理发送请求后的响应。回调函数将被每个请求的Future对象调用,并且在请求完成后被执行。这里我们只是简单地打印响应的状态码和文本。
然后,我们声明一个空列表futures来保存请求的Future对象。
在下一步中,我们定义了一个URL列表,并使用循环遍历列表中的每个URL。对于每个URL,我们通过FuturesSession对象的get方法发送GET请求,并使用add_done_callback方法为每个请求添加回调函数。然后,我们将每个请求的Future对象添加到futures列表中。
最后,通过concurrent.futures.wait方法等待所有请求的完成。一旦所有请求完成,将会执行打印提示消息"All requests completed!"。
