让你的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以及全家桶的教程更新在下方,如果懒,懒,懒的看官方文档,就等我(大哥)更新吧!

转载于:https://juejin.im/post/5ce95c736fb9a07eac05af69

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值