利用 Python 实现每秒处理上百万次 HTTP 请求!

软件开发的概念。Python编程语言内部二进制代码放大镜

私信小编007即可自动获取大量Python视频教程以及各类PDF!用Python做到每秒处理上百万次HTTP请求,可能吗?也许不能,但直到最近,这已成为现实。很多公司都在为了提升程序的执行性能和降低服务器的运营成本,而放弃Python去选择其它编程语言,其实这样做并不是必须,因为Python完全可以胜任这些任务。Python社区最近做了大量关于性能的优化。

Python的微框架(蓝色)、NodeJS和Go(绿色)和Japronto(紫色)勘误表:如果谨慎点用Go的stdlibHTTP服务器可以写出比上图的Go快12%的代码。另外fasthttp也是一个非常棒的Go服务器,同样的测试中它的性能几乎只比Japronto低18%。真是太棒了!更多细节查可以看https://link.zhihu.com/?

我们可以看到其实MeinheldWSGI服务器已经和NodeJS和Go的性能差不多了。尽管它用的是阻塞式设计,但还是要比前面那四个要快的多,前面四个用的是异步的Python解决方案。所以,不要轻易相信别人那些关于异步系统总是比同步系统更快的说法,虽然都是并发处理的问题,但事实远不如想象的那么简单。

HTTP流水线(图片来自Wikipedia)HTTP流水线在这里起着决定性的因素,因为Japronto用它来做执行并发请求的优化。大多数服务器把来自客户端的流水线和非流水线请求都一视同仁,用同样的方法处理,并没有做针对性的优化。

经过优化Japronto拿到了1,214,440RPS的成绩除了利用客户端流水线请求,和优化调用,还有一些其它可用的技术。Japronto几乎都是用C写的。包含解析器、协议、链接管理、路由、请求、应答等对象都是用C扩展写的。Japronto力图做到Python的懒加载,比如,协议头的字典只有在被试图请求到时才会被创建,另外一系列的对象也只有在第一次使用时才会被创建。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181030A2143300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券