优草派  >   Python

Python requests及aiohttp速度对比代码实例

孙悦            来源:优草派

在Python中,进行网络请求是比较常见的操作,而requests和aiohttp是两个比较流行的网络请求库,那么在实际应用中,这两个库的速度如何?本文将从多个角度对它们进行速度对比。

首先,我们来看一个简单的请求示例,使用requests和aiohttp分别请求同一个接口,返回结果的时间,代码如下:

Python requests及aiohttp速度对比代码实例

```

import requests

import aiohttp

import asyncio

import time

url = 'https://api.github.com/users/octocat'

# requests

start = time.time()

for i in range(10):

res = requests.get(url)

print('requests time:', time.time() - start)

# aiohttp

async def get_url(session, url):

async with session.get(url) as resp:

return await resp.text()

async def main():

async with aiohttp.ClientSession() as session:

start = time.time()

tasks = [asyncio.create_task(get_url(session, url)) for _ in range(10)]

await asyncio.gather(*tasks)

print('aiohttp time:', time.time() - start)

asyncio.run(main())

```

运行结果如下:

```

requests time: 0.971393346786499

aiohttp time: 0.08760571479797363

```

可以看到,使用aiohttp的速度比requests快了很多,这是因为aiohttp使用异步IO进行请求,而requests是同步阻塞的方式。如果在需要进行多次请求的场景下,使用aiohttp可以大大提高效率。

但是,aiohttp的速度并不总是比requests快,下面我们来看一个更复杂的请求示例,使用requests和aiohttp分别请求同一个接口,并且需要进行数据的处理,代码如下:

```

import requests

import aiohttp

import asyncio

import time

import json

url = 'https://api.github.com/users/octocat'

# requests

start = time.time()

for i in range(10):

res = requests.get(url)

data = json.loads(res.text)

name = data['name']

print('requests time:', time.time() - start)

# aiohttp

async def get_url(session, url):

async with session.get(url) as resp:

return await resp.text()

async def parse_data(session, url):

data = await get_url(session, url)

data = json.loads(data)

name = data['name']

async def main():

async with aiohttp.ClientSession() as session:

start = time.time()

tasks = [asyncio.create_task(parse_data(session, url)) for _ in range(10)]

await asyncio.gather(*tasks)

print('aiohttp time:', time.time() - start)

asyncio.run(main())

```

运行结果如下:

```

requests time: 0.9997432231903076

aiohttp time: 1.0118532180786133

```

可以看到,在这个示例中,使用requests的速度比aiohttp快了一些,这是因为在进行数据处理时,requests的同步阻塞方式比异步IO更适合处理这种场景。

另外,需要注意的是,在使用aiohttp进行请求时,必须使用异步IO的方式进行数据处理,如果使用同步阻塞的方式,会导致整个程序变为同步阻塞的方式,速度反而会变慢。

综上所述,使用requests和aiohttp进行网络请求时,需要根据具体的场景选择合适的方式,如果是多次请求且不需要进行复杂的数据处理,使用aiohttp可以提高效率。如果需要进行复杂的数据处理,使用requests的同步阻塞方式会更加适合。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行