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))
发布了7 篇原创文章 · 获赞 5 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/DahlinSky/article/details/104253068