aiohttp及asyncio的简单使用

aiohttp及asyncio的简单使用

aiohttp是一个异步的请求库,类似于requests库的异步版本,asyncio是一个python标准库自带的协程框架,可以用于高并发异步编程,两者结合使用效果十分理想,可以用于编写测试接口的高并发脚本。

aiohttp 调用get类型接口实例
async def aiohttpget_test(url, num=0):
    '''
    get 方法测试
    :param url:
    :param num:
    :return:
    '''
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0',
    }
    params = {"num": num}
    async with aiohttp.ClientSession() as session:
        async with session.get(url, params=params, headers=headers) as resp:
            return await resp.json()
asyncio调用aiohttp方法
async def main_single(url):
    '''
    单次调用main方法
    :return:
    '''
    task_get = asyncio.create_task(aiohttpget_test(url=url, num=1))
    await task_get
按顺序并发执行任务
async def main_gather(url):
    '''
    按顺序并发执行任务main方法
    :return:
    '''
    task_gets = [asyncio.create_task(aiohttpget_test(url=url, num=i)) for i in range(100)]
    done = await asyncio.gather(*task_gets)
    print(len(done))
    for d in done:
        print(d)
无序并发执行任务
async def main_wait(url):
    '''
    无序并发执行任务main方法
    :return:
    '''
    task_gets = [asyncio.create_task(aiohttpget_test(url=url, num=i)) for i in range(500)]
    done, pending = await asyncio.wait(task_gets, timeout=1, return_when="ALL_COMPLETED")
    print(len(done))
    for d in done:
        print(d.result())

最后在main方法中调用执行这些方法,接口可以httpbin搭建测试服务

if __name__ == '__main__':
    url = "http://192.168.127.133/get"
    asyncio.run(main_gather(url))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值