如何在Python中使用FuturesSession()实现并发请求
发布时间:2023-12-28 04:27:24
在Python中,可以使用FuturesSession类来实现并发请求。FuturesSession类是treq库的一部分,用于异步发送大量的HTTP请求。
首先,需要通过pip安装treq库:pip install treq
下面是一个使用FuturesSession进行并发请求的示例:
import concurrent.futures
from requests_futures.sessions import FuturesSession
# 创建一个FuturesSession对象
session = FuturesSession()
# 定义一个处理响应的回调函数
def handle_response(response):
# 处理响应数据
data = response.text
# 打印响应结果
print(data[:100])
# 定义一个发送请求的函数
def send_request(url):
# 发送GET请求
future = session.get(url)
# 设置回调函数
future.add_done_callback(handle_response)
# 定义请求的URL列表
urls = [
'http://example.com',
'http://baidu.com',
'http://google.com'
]
# 使用concurrent.futures模块的ThreadPoolExecutor创建线程池
with concurrent.futures.ThreadPoolExecutor() as executor:
# 提交每个请求到线程池中进行并发处理
futures = [executor.submit(send_request, url) for url in urls]
# 等待所有请求完成
concurrent.futures.wait(futures)
在这个例子中,首先使用FuturesSession类创建一个session对象,然后定义了一个处理响应的回调函数handle_response,并在发送请求时设置回调函数。然后定义了一个send_request函数,用于发送请求,通过session对象的get方法发送GET请求,并将响应数据传递给回调函数处理。
接下来,定义了一个urls列表,包含了要请求的URL。然后,使用concurrent.futures模块的ThreadPoolExecutor创建一个线程池,并使用executor.submit方法将每个请求提交到线程池中进行并发处理。最后,使用concurrent.futures.wait方法等待所有请求完成。
这样,就可以使用FuturesSession类实现并发请求。每个请求将在独立的线程中发送并处理响应,可以在处理响应的回调函数中进行进一步的处理,例如解析响应数据、存储数据等。另外,可以根据实际需求调整线程池的大小,以控制并发请求数量。
