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

1、前言

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

然而,Python在速度上彻底没有优点可言。mysql

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

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

如下是最主要的缘由:

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

今天,咱们不纠结以上哪一种缘由对性能影响最大,而是来谈谈当下Python3.7中,咱们有怎样的方法让他变得比想象中的快,并且快不少sql

2、开始探索

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

固然,这并非咱们今天的目标安全

3、进入正题

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

咱们要讲的是当下比较强悍的 Sanicsession

为何要讲Sanic,我想最主要的的缘由是他足够快,并且能够进行快速构建,他写起来相似Flask,口说无凭,看图框架

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

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

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

  • 快(爽)到起飞

  • 构建速度快

  • 原生支持 async/await 语法

  • 社区慢慢活跃,相比以前的不成熟慢慢出现一些优秀的插件

  • 自动分配&管理进程

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

附上Sanic 官方文档

3、进阶

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

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

这是我平时用的比较多的一些库,我的喜爱pg,至于mysql等其余数据库,你们能够自行搜索

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

4、擦屁股

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

相关文章
相关标签/搜索