专栏名称: Python程序员
最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具。我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
相关文章推荐
Python爱好者社区  ·  为什么it外包永远在招人? ·  昨天  
Python爱好者社区  ·  154W,我入局了! ·  2 天前  
Python爱好者社区  ·  蚂蚁集团发布全员信:薪资大调整。 ·  3 天前  
Python爱好者社区  ·  字节程序员过年回家被亲戚鄙视:你985在互联 ... ·  5 天前  
Python爱好者社区  ·  卧槽,这就是最牛逼的python教程 ·  5 天前  
51好读  ›  专栏  ›  Python程序员

使用异步Python 3.6和Redis编写快速应用程序

Python程序员  · 公众号  · Python  · 2017-05-03 22:40

正文

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

人们对于Python和其他解释型语言(例如:Ruby,JavaScript,PHP,Perl等等),最常抱怨的就是他们太慢了。显然,网络应用中,速度更快的语言能够实现更短的响应时间以及降低服务器的消耗。

为了解决这样的问题,Python3.4引入了asyncio模块,随后,Python3.5则为它设计了新的语法。然后,随之而来的uvloop网络库为asyncio带来了速度上的极大提升:

uvloop使得asyncio相当快。实际上,和nodejs,gevent以及任何其他Python中的异步网络架构相比,asyncio的速度至少是它们的2倍,基于uvloop的asyncio在性能上的表现已经接近于Go语言了。

在Paxos( 译者注:一种基于消息传递的一致性算法 )中,我们大量使用asyncio,既是因为它的性能更好,也是因为asyncio更加适合我们整体架构。我们的产品与来自不同的客户端的事务数据同步,同时,因为它是一个分布式系统,所以本质上讲,它又是异步的。

asyncio能够出色地将吞吐量最大化,但是我们也关心要减少延迟。就延迟而言,你的数据库本身会是一个主要的瓶颈。实践中,当我们使用例如合适的索引,或者固态磁盘这些最佳方法时,一个大约10ms响应时间的数据库查询被认为是效果不错的。

当然,RAM要比asyncio要快几个数量级,但是简单的"key-value"型的存储结构,并不能实现软件工程师们所常常依赖的许多特性。比如,多索引和基本类型检测是非常有用的,也最好能有像"ORDER BY","LIMIT"和"OFFSET"这些功能。

此外,Redis的性能、高级特性及其文档,已经给我们留下了非常深刻的印象。所以我们写了一个可被Redis支持的对象映射器:" subconscious ",它依赖于asyncio和Redis的强大原语。使得你能以RAM的性能利用数据库,这就像是一个SQLAlchemy的精简版(不支持"JOIN"操作)。

  • 译者注:Redis:一个key-value存储系统

  • 译者注:SQLAlchemy:Python编程语言下的一款开源软件。提供了SQL工具包及“对象关系映射”工具,使用MIT许可证发行。

你可以如下定义一个模型(更多细节请查阅 official repo):







请到「今天看啥」查看全文