你可能不知道的 Python Web 部署方式总结_python web不部署可以吗

Python Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。

WSGI区分为两个部份:一为“服务器”或“网关”,另一为“应用程序”或“应用框架”。在处理一个WSGI请求时,服务器会为应用程序提供环境上下文及一个回调函数(Callback Function)。当应用程序完成处理请求后,透过先前的回调函数,将结果回传给服务器。所谓的 WSGI 中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:

  1. 重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象。
  2. 允许在一个进程中同时运行多个应用程序或应用框架。
  3. 负载均衡和远程处理,通过在网络上转发请求和响应消息。
  4. 进行内容后处理,例如应用XSLT样式表。

以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。WSGI没有官方的实现, 因为WSGI更像一个协议。只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。WSGI就是Python的CGI包装,相对于Fastcgi是PHP的CGI包装。

WSGI将 web 组件分为三类: web服务器,web中间件,web应用程序, wsgi基本处理模式为 : WSGI Server -> (WSGI Middleware)* -> WSGI Application 。

uwsgi:

uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。据称其效率是fcgi的10倍。具体的协议内容请参考:the uwsgi protocol(http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html

以上四者都可以理解为协议!协议!协议!实现了这样的协议,就可以实现Web服务器与Web应用程序相关联的web服务!

uWSGI:

uWSGI项目旨在为部署分布式集群的网络应用开发一套完整的解决方案。uWSGI主要面向web及其标准服务,已经成功的应用于多种不同的语言。由于uWSGI的可扩展架构,它能够被无限制的扩展用来支持更多的平台和语言。目前,你可以使用C,C++和Objective-C来编写插件。项目名称中的“WSGI”是为了向同名的Python Web标准表示感谢,因为WSGI为该项目开发了第一个插件。uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。uWSGI,既不用wsgi协议也不用FastCGI协议,而是自创了上文说将的uwsgi协议。

uWSGI的主要特点如下:

  1. 超快的性能。
  2. 低内存占用(实测为apache2的mod_wsgi的一半左右)。
  3. 多app管理。
  4. 详尽的日志功能(可以用来分析app性能和瓶颈)。
  5. 高度可定制(内存大小限制,服务一定次数后重启等)。

Gunicorn:

和uWSGi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是前文所讲的WSGI,这是python2.5时定义的官方标准(PEP 333 ),根红苗正,而且部署比较简单,详细的使用教程请点击这里(http://gunicorn.org/)。Gunicorn采用prefork模式,Gunicorn 服务器与各种 Web 框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。它的特点是与 Django 结合紧密,部署特别方便。 缺点也很多,不支持 HTTP 1.1,并发访问性能不高,与 uWSGI,Gevent 等有一定的性能差距。

  1. Gunicorn设计

Gunicorn 是一个 master 进程,spawn 出数个工作进程的 web 服务器。master 进程控制工作进程的产生与消亡,工作进程只需要接受请求并且处理。这样分离的方式使得 reload 代码非常方便,也很容易增加或减少工作进程。 工作进程这块作者给了很大的扩展余地,它可以支持不同的IO方式,如 Gevent,Sync 同步进程,Asyc 异步进程,Eventlet 等等。master 跟 worker 进程完全分离,使得 Gunicorn 实质上就是一个控制进程的服务。

  1. Gunicorn源码结构

从 Application.run() 开始,首先初始化配置,从文件读取,终端读取等等方式完成 configurate。然后启动 Arbiter,Arbiter 是实质上的 master 进程的核心,它首先从配置类中读取并设置,然后初始化信号处理函数,建立 socket。然后就是开始 spawn 工作进程,根据配置的工作进程数进行 spawn。然后就进入了轮询状态,收到信号,处理信号然后继续。这里唤醒进程的方式是建立一个 PIPE,通过信号处理函数往 pipe 里 write,然后 master 从 select.select() 中唤醒。

工作进程在 spawn 后,开始初始化,然后同样对信号进行处理,并且开始轮询,处理 HTTP 请求,调用 WSGI 的应用端,得到 resopnse 返回。然后继续。

Sync 同步进程的好处在于每个 request 都是分离的,每个 request 失败都不会影响其他 request,但这样导致了性能上的瓶颈。

Tornado:

Tornado即使一款python 的开发框架,也是一个异步非阻塞的http服务器,它本身的数据产出实现没有遵从上文所说的一些通用协议,因为自身就是web服务器,所以动态请求就直接通过内部的机制,输出成用户所请求的动态内容。如果把它作为一个单独服务器,想用它来配合其他的框架如Flask来部署,则需要采用WSGI协议,Tornado内置了该协议,tornado.wsgi.WSGIContainer。

wsgiref:

Python自带的实现了WSGI协议的的wsgi server。wsgi server可以理解为一个符合wsgi规范的web server,接收request请求,封装一系列环境变量,按照wsgi规范调用注册的wsgi app,最后将response返回给客户端。Django的自带服务器就是它了。

以上都可以理解为实现!实现!实现!实现了协议的工具!

注:mod_wsgi(apache的模块)其实也是实现了wsgi协议的一个模块,现在几乎被废弃了,所以也不多说了,感兴趣的自己查一下吧。

所以如果你采用Django框架开发了应用之后,想部署到生产环境,肯定不能用Django自带的,可以用使用uwsgi协议的uWSGI服务器,也可以采用实现了WSGI协议的gunicorn或者Tornado,亦可以用FastCGI、CGI模式的Nginx、lighttpd、apache服务器。其他框架亦如此!明白了这些概念在部署的时候就可以做到心中有数,各种工具之间的搭配也就“知其然,并知其所以然”了。

在我们组的项目中有两种框架Django和Tornado,生产环境也用到了两种部署方式。uWSGI和Gunicorn:

Django项目用Nginx+uWSGI方式部署,Tornado项目用Nginx+Gunicorn方式部署:

Nginx都作为负载均衡以及静态内容转发。Tornado项目用supervisord来管理Gunicorn,用Gunicorn管理Tornado。众所周知,由于Python的GIL存在,所以Python的并发都采用多进程模式,所以我们部署的方式是一个核心两个进程。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
tps://bbs.csdn.net/topics/618317507)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值