让你的Python(Web应用)飞起来,(异步/协程)全家桶

一、前言

Python语言近年来人气爆棚。它广泛应用于网络开发运营,数据科学,网络开发,以及网络安全问题中。

然而,Python在速度上完全没有优势可言。

在速度上,Java如何同C,C++,C#或者Python相比较?答案几乎完全取决于要运行的应用。在这个问题上,没有完美的评判标准,然而The Computer Language Benchmarks Game 是一个不错的方法。

我想要回答这样一个问题:当运行同一个程序时,为什么Python会 比其他语言慢2到10倍?为什么我们无法将它变得更快?

以下是最主要的原因:

  • “它是GIL(Global Interpreter Lock全局解释器锁)”
  • “它是解释型语言而非编译语言”
  • “它是动态类型语言”

今天,我们不纠结以上哪种原因对性能影响最大,而是来谈谈当下Python3.7中,我们有怎样的方法让他变得比想象中的快,而且快很多

二、开始探索

Python在3.5版本中引入了关于协程的语法糖async和await,这意味着我们可以使用协程的方式来编写Python应用程序,这会让我们的Python代码像Node一样,让他变成异步方式运行

当然,这并不是我们今天的目标

三、进入正题

在众多的Web框架中,Django、Tornado、Flask已经相对成熟,Tornado等框架也可以进行异步方式的选择,但今天我们都不讲

我们要讲的是当下比较强悍的 Sanic

为什么要讲Sanic,我想最主要的的原因是他足够快,而且可以进行快速构建,他写起来类似Flask,口说无凭,看图

这是官方提供的 基准测试结果

Sanic的开发者说他们的灵感来自于这篇文章 uvloop: Blazing fast Python networking

这是在我使用两年来的感受

  • 快(爽)到起飞
  • 构建速度快
  • 原生支持 async/await 语法
  • 社区慢慢活跃,相比之前的不成熟慢慢出现一些优秀的插件
  • 自动分配&管理进程

只是简单说一下感受,今天的目的不是为了教大家如何使用Sanic,而是希望更多的人加入Sanic,体验到Sanic以及更多优秀的框架的出现带给我们的便捷

附上Sanic 官方文档

三、进阶

说了这么多,还有一个问题,我的Web使用了协程,那么意味着我在操作数据库时,使用常规的pymysql以及psycopg2会阻塞我们的线程,我们的Web服务再快,卡在数据库也是徒劳,那么接下来为大家带来一些我常用的协程支持库

  • Postgresql: asyncpg
  • Redis: aioredis
  • I/O Framework:uvloop

这是我平时用的比较多的一些库,个人喜好pg,至于mysql等其他数据库,大家可以自行搜索

Sanic问世以来,我已经利用它构建过大大小小的Web应用程序,包括他日益完善的社区以及各方面的支持,例如sanic_session等库的出现,让他不再显得那么吃力,让他不再面对大型生产环境而无能为力,到目前为止我一直在热衷于探索他的小插件,如果你们有更好的Sanic支持,请留言

四、擦屁股

我会抽时间将Sanic以及全家桶的教程更新在下方,如果懒,懒,懒的看官方文档,就等我(大哥)更新吧!

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%