Requests 与 HTTP Keep-Alive

Requests 与 HTTP Keep-Alive

在半个月以前,我介绍过一个强大并且易于使用的Python HTTP 库:Requests,并且在文章中提及了Requests的会话(Session)中可以自动实现持久链接(Keep-Alive)。

但是古人教导我们纸上得来终觉浅,绝知此事要躬行,不实际演练一下,我总觉得不放心,于是写个小程序测试一下。

思路

我们做一些小程序,遍历获得几个用户的用户ID以及用户名。通过对比程序执行时间,来看看Keep-Alive是否生效。

其实这个是可以通过一个API一下子返回的,那么就一次连接岂不是无法彰显Keep-Alive的作用了,所以就用笨方法喽。

代码

执行结果

以下为上述程序执行结果:

对比可知,使用Session程序效率大幅提高,这就是Keep-Alive的神奇之处哦。

尽管效率提升很明显,约2-3倍,但是没到很夸张的地步,比如10倍8倍,这是因为我们get_accounts取回的数据量很大,如果数据量很小,网络操作频繁的话,就会更加明显啦。

验证

你可能说,尽管效率提升了,但是一定是Keep-Alive的功劳吗?也许就是Session干了啥不为人知的提升效率的勾当呢?

我们在代码中加入如下语句来打印DEBUG信息

我们把程序结果分成两部分截屏,便于比较

通过对比,我们很容易就发现如下规律:

  • 第一段程序每次都创建连接,再请求数据
  • 第二段程序仅创建一次连接,然后每次请求数据即可

并且我们捎带发现一个秘密,Requests用的urllib3哦。

结论

Requests的会话(Session)中可以自动实现持久链接(Keep-Alive),可以极大程度提升程序的效率,尤其是网络操作频繁的程序。

相关链接


This page is synchronized from the post: Requests 与 HTTP Keep-Alive

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×