需求背景:目前SaaS复制问卷的时候是通过调接口的方式进行的,在需要批量请求的情况下,大量接口需要并行的情况,需要用到异步请求

1、多个请求

 ahttp:ahttp 是一个所有的http连接请求均使用协程的方式,使请求过程中 IO 操作交给其他硬件,而CPU专注于处理计算型任务,可以大量的节约等待的时间

ahttp的使用方式基本上和requests一致,只不过requests请求是同步,而ahttp的请求是异步。不同的是requests可以直接请求,而由于ahttp是异步的,所以需要构造好请求之后进行一次“执行”

安装:

pip install ahttp

以下用多个请求示例:整理好所有接口后,放进reqs充当请求对象,再通过ahttp.run执行这些请求

import ahttp

urls1 = [ f"https://movie.douban.com/top250?start={i*25}" for i in range(2)]
urls=[
      'http://www.heroku.com',
      'http://python-tablib.org',
      'http://httpbin.org',
      'http://python-requests.org',
      'http://fakedomain/',
      'http://kennethreitz.com'
]

reqs = [ahttp.post(i) for i in urls]
resqs = ahttp.run(reqs,order=True,pool=3)#按顺序排序,pool线程池可以设置最大并发数

 多个请求(使用session)

和 前面的使用ahttp构造请求list请求相比,使用session请求速度更快,而且共享cookies,因为session创建的是一个持久的链接。由于是异步请求,得到的resps并不是按照reqs请求的顺序排列的,因此我们需要按照顺序处理,只需要在ahttp.run添加一个参数order

import ahttp

urls1 = [ f"https://movie.douban.com/top250?start={i*25}" for i in range(2)]
urls=[
      'http://www.heroku.com',
      'http://python-tablib.org',
      'http://httpbin.org',
      'http://python-requests.org',
      'http://fakedomain/',
      'http://kennethreitz.com'
]

sess=ahttp.Session()#和使用ahttp构造请求list请求相比,使用session请求速度更快,而且共享cookies,因为session创建的是一个持久的链接
reqs = [sess.post(i) for i in urls]
resqs = ahttp.run(reqs,order=True,pool=3)#按顺序排序,pool线程池可以设置最大并发数
print('全部',resqs)
print('第1个',resqs[0])

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐