简单的 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 ,发现速度明显的提高了。
但是,上面的方式显然不优雅。