使用grequests和python实现并发请求多个API接口
发布时间:2024-01-19 21:03:09
使用grequests库来实现并发请求多个API接口只需要几行代码。grequests库是对requests库的封装,在执行并发请求时表现出色。
import grequests
# 准备需要请求的API接口列表
urls = [
'http://api1.example.com',
'http://api2.example.com',
'http://api3.example.com',
...
]
# 定义一个处理结果的回调函数
def handle_response(response, **kwargs):
# 处理response的代码
...
# 构造并发请求的请求列表
rs = (grequests.get(url) for url in urls)
# 使用imap实现并发请求,并传入回调函数
responses = grequests.imap(rs, size=10, exception_handler=handle_response)
# 处理所有请求的结果
for response in responses:
# 处理response的代码
...
上述代码通过构造一个请求列表,使用grequests.imap方法来实现并发请求。在该方法中,我们可以指定并发请求的最大数量(size参数),也可以指定在请求过程中发生异常时的处理函数(exception_handler参数)。
对于每个请求的结果,我们可以通过迭代responses对象来逐个获取,并在循环中处理每个response的返回数据。
下面是一个完整的例子,使用grequests并发请求多个API接口获取返回数据。
import grequests
# 准备需要请求的API接口列表
urls = [
'https://api1.example.com',
'https://api2.example.com',
...
]
# 定义一个处理结果的回调函数
def handle_response(response, **kwargs):
if response.status_code == 200:
data = response.json()
print(f'Response data: {data}')
else:
print(f'Response status code: {response.status_code}')
# 构造并发请求的请求列表
rs = (grequests.get(url) for url in urls)
# 使用imap实现并发请求,并传入回调函数
responses = grequests.imap(rs, size=10, exception_handler=handle_response)
# 处理所有请求的结果
for response in responses:
if isinstance(response, Exception):
print(f'Request error: {response}')
在这个例子中,我们定义了一个名为handle_response的回调函数来处理每个请求的返回数据。在回调函数中,我们首先判断返回的状态码,如果是200,就将返回的数据解析为JSON格式并打印出来;如果不是200,就打印出状态码。
然后,我们构造了一个请求列表,使用grequests.imap方法进行并发请求。设置并发请求数量为10。在处理每个response时,我们首先判断是否出现异常,如果出现异常,则打印出异常信息。
通过使用grequests库,我们可以方便地实现并发请求多个API接口,提高请求的效率。
