Python的WEB框架

协议分类

现今的Python的Web协议有两种,一种是WSGI,另一种是ASGI。

WSGI 点击进入百度百科

定义

(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口。

发展

如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。

WSGI(有时发音作’wiz-gee’)是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的 。

框架

支持WSGI的Web应用框架有很多,其中比较出名的如下:

ASGI

定义和发展

为了解决WSGI不支持websocket的问题,基于WSGI提出了异步网关协议接口,一个介于网络协议服务和Python应用之间的标准接口,能够处理多种通用的协议类型,包括HTTP,HTTP2和WebSocket。

可以说ASGI是WSGI的扩展和补充。

框架

基于ASGI的框架较流行的如下:

值得一提的是,Uvicorn这个框架具有和nodejs和go高并发性能,很令人期待。

web效率

WSGI基本的解决方案是nginx + uwsgi (+gevent可选),或者nginx + gunicorn (+gevent可选),可以解决并发量不是很高的场景,绝大多数是可以适用的。

Python的高并发场景下,可以uwsgi或者gunicorn和gevent搭载适用,uwsgi和gevent可以当做单机的多进程负载平衡器,gevent是多协程并发,这样可以避免单核负载过高,其他核负载低以至于无负载的情况。

再高的并发,必须要借助一些解决方案了,例如

  • 使用缓存(注意防止击穿还有缓存更新)
  • 使用负载均衡将访问达到不同的机器上
  • 使用高性能的消息中间件(rabbitmq、protobuf)实现集群的模式,也就是rpc协议进行远程调用,这种异步的方式,必须要在消息队列之上增加自己的协议,增加一些访问和返回的同步时序,看起来像是一次请求和返回,实际上是异步处理
  • 数据集中处理(mysql集群、hadoop和spark大数据),由于数据量庞大,单服务器处理起来很吃力,需要多台服务器同时处理
解释器(引用文章https://blog.csdn.net/weixin_37988176/article/details/109368532)

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython

IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

PyPy

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

总结

针对高并发Python也可以有好的解决方案,Python语法简洁是一个优势,我一直致力于python的web开发方向,写过很多python的web系统,如何利用python的语言优势,将web开发变得简洁,同时使得处理高效。

另外令人头疼的是将python打包源码发布,目前都是源码安装和启动,希望以后可以实现web打包功能,能够更好的管理版本。

最后给介绍一下自己开发的框架,地址: https://gitee.com/flamingo-apps/gesang(格桑花),基于starlette的web开发框架,使得想django一样开发高效,像flask一样灵活搭配。
结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值