简单的 aiphttp
介绍。
请求
session
普通使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import asyncio
import aiohttp
async def test(): async with aiohttp.ClientSession() as session: async with session.get("http://www.baidu.com") as r: status = r.status print(status)
if __name__ == '__main__': asyncio.run(test())
|
但是,利用 session
最大的好处就是,session 可以有效的降低网络请求时间「第一次连接成功后,如果是同一个域名的话,连接会非常快」
每次创建新的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import asyncio import time
import aiohttp
async def test(): url = ["http://www.baidu.com"] * 30 start = time.time() async with aiohttp.ClientSession() as session: async with session.get("http://www.baidu.com") as r: status = r.status print(status) print(time.time() - start)
if __name__ == '__main__': asyncio.run(test())
|
输出是 2.3528871536254883
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import asyncio
import aiohttp import time
async def test(): async with aiohttp.ClientSession() as session: async with session.get("http://www.baidu.com") as r: status = r.status print(status)
if __name__ == '__main__': start = time.time() for i in range(30): asyncio.run(test()) print(time.time() - start)
|
输出是
2.642192840576172
发现,每次创建新的 session
和不用 session
是一样的效果。
复用一个 session
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import asyncio import time
import aiohttp
async def get(session, url): r = await session.get(url) status = r.status print(status)
async def test(): tasks = [] start = time.time() session = aiohttp.ClientSession() for i in range(30): tasks.append(get(session, "http://www.baidu.com")) await asyncio.wait(tasks) await session.close() print(time.time() - start)
if __name__ == '__main__': asyncio.run(test())
|
输出 0.4676480293273926
,发现速度明显的提高了。
但是,上面的方式显然不优雅。