首页 > 系统相关 >python部署项目为什么要用Nginx和uWSGI

python部署项目为什么要用Nginx和uWSGI

时间:2024-02-28 15:55:05浏览次数:41  
标签:web 并发 python Django Nginx Flask 服务器 uWSGI

一、测试运行python项目

  1.1 Flask项目

    

    说明1:当我们直接用编译器运行Flask项目的时候,会有一个提示:意思就是:这是开发环境的服务器,不能用于生产环境的部署,请使用WSGI的服务器替换

  1.2 Django项目

    

    说明2:当我们直接用编译器运行Django项目的时候,同样有个提示,这是一个开发环境的服务器,意思就是同样不能用于生产环境

  1.3 总结  

    • Flask自带一个服务器,主要用在开发环境。默认情况下一次只能处理一个请求,处理能力比较有限。
    • Django 运行 runserver 命令可以直接作为服务器使用,但是也是单线程的。性能差,如果出现错误挂掉。那么整个进程都挂掉了
    • 所以我们在生产环境要,就要使用安全稳定效率高,性能强的服务器。
    • 之所以Flask和Django直接运行不能用于生产环境是因为Flask和Django是web开发框架,而不是web服务器,web框架开发的时候,只是为了方便测试,提供了一个测试服务器而已。

二、web服务器

  通过上面的例子可以看出,如果让我们开发出来的项目能得到成千上万,几十万,甚至几百万几千万的用户访问的话,我们需要一个强劲有力的web服务器为我们保驾护航。   web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。我常用的Nginx就是一个web服务器,Djangoflask就是web框架。

  web服务器的特点:

    • 接受客户端(浏览器,app,小程序等)发送的请求
    • web服务器通常都会支持高并发(Nginx上万级别的并发)

  所以我们在部署python项目的时候,都需要再额外部署一个web服务器,主要作用就是给我们的应用提供一个高并发安全的互联网访问环境,通常我们使用Nginx作为我们项目的web服务器。

三、Nginx服务器

  nginx是一款轻量级的web 服务器,反向代理服务器及电子邮件(imap/pop3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,大部分网站都有使用nginx。

  nginx的有点:

  1. 支持高并发,能够支持高达 50,000 个并发连接数的响应,这样我们的网站并发性就很棒。
  2. 负载均衡,当访问量还是多的时候,可以同时开启多个应用服务器,进行负责均衡
  3. 提供静态服务,动静分离,减少静态资源访问对应用服务器的压力
  4. 反向代理

  nginx在部署的时候可以给我的应用服务器,提供一个高并发,高可靠性,安全的网络访问环境,通过Nginx可以接收到用户通过浏览器或者app等前端的方式访问到我们的网站。

  注意:这里Nginx只能帮助我们接收客户端(浏览器,app,小程序等)的请求,Nginx并不具备处理请求的能力。例如:用户发送了一个获取用户信息的请求,Nginx并没有用户的信息,所以Nginx并不能直接处理用户的请求,所以Nginx需要将用户的这个请求转发给我们的应用服务器(Flask或者Django程序等),但是,这里注意!注意!注意!,Nginx和我们Web框架(Flask/Django)也不能直接通信,他们的协议不一样(通俗的讲就是一个说英语的,一个说汉语的,谁也听不懂谁),这是就需要找一个翻译,既能读懂Nginx的协议,也能读懂python的web框架协议的,而且还要高效,这个东西就是WSGI。

四、WSGI和uWSGI

  WSGI是一种通信协议。WSGI 不是框架,也不是一个模块,而是介于 Web应用程序(Flask/Django)与 Web Server (Nginx)之间交互的一种规范。

  uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

  所以我们使用uWSGI充当Nginx和我们的程序(Flask/Django)之间的桥梁,这也就是为什么我们部署python项目需要uWSGI和Nginx的原因了

五、通过Nginx和uWSGi请求响应全过程

  

 

标签:web,并发,python,Django,Nginx,Flask,服务器,uWSGI
From: https://www.cnblogs.com/Se7eN-HOU/p/18040681

相关文章

  • nginx 反向代理proxy_pass, 同一个端口多个域名的问题
    案例:serverip1:1.2.3.4domain1:aa.com>>指向ip1,port80domain2:bb.com>>指向ip1,port80serverip2:2.2.3.4domain3:cc.com>>指向ip3配置nginx转发到aa.com域名下的服务则需要做如下配置:location/{proxy_set_headerHostaa.com......
  • Python会超越Java吗
    与Java相比,PythonPython和Java,作为各自领域的领导者,他们的力量在工程界和开发者社区不断被讨论。Python因其简洁的语法和快速的开发而被广泛应用于数据分析、人工智能、网络爬虫等领域。Java在企业级应用、安卓应用开发和大型系统建设中占有重要地位,具有强大的类型和面向对象的特......
  • Python 线性回归(y=ax+b)
    线性回归主要是拟合一个函数,能预测一个新的样本:(1)数据集如下: (2)预测值:feet=5001#-*-coding:utf-8-*-2importmatplotlib.pyplotasplt3importpandasaspd4fromsklearnimportlinear_model5importos6os.chdir("/Users/xxx/PycharmProjects/dataset/"......
  • 使用矩池云 Docker 虚拟机安装VNC、Conda、Python及CUDA
    矩池云虚拟机支持Docker使用,但是由于虚拟机目前不支持启动时传递环境变量来设置VNC、Jupyterlab连接密码,所以我们没有创建相关基础镜像(设置固定密码容易泄漏),下面给大家介绍手动安装使用VNC、Jupyterlab、CUDA等步骤,以便支持使用OpenGL等功能的使用,开启更完善和强大的功能体......
  • python基础-函数
    一、参数示例deffun(a,b=0,*args,**kwargs):"""指定收集参数的固定形式,*+指定的位置参数名,惯例*args,自定义*position都行,**+指定的关键字参数名,惯例**kwargs,需要注意的是,在函数体内调用时不要混淆*的含义,*+数据序列,指展开序列,取其中的值,而想使用传入的......
  • Python面向对象,类属性,实例属性,类方法,实例方法,静态方法的区别及用法详解
    一.前言在Python的面向对象编程中,类属性和实例属性是两个不同的概念,它们在作用域和使用方式上有所区别。在Python中的面向对象编程中有三种方法:实例方法、类方法和静态方法,它们之间的差异主要体现在参数传递和调用方式上。二.面向对象-类属性和实例属性1.区别在Pyth......
  • Python: Star unpacking expressions in for statements
    今天发现在Python3.11版本中一个很不错的新特性,可以在for循环中使用unpacking,这意味着可以更灵活地组合迭代对象。ls=[1,2,34]foriin1,2,3,*ls,789:print(i)"""1231234789"""其实我第一次知道for循环中可以使用x,y,z这样的结构,想想也是......
  • Python语言Numpy包之Meshgrid 函数
    Meshgrid函数的基本用法在Numpy的官方文章里,meshgrid函数的英文描述也显得文绉绉的,理解起来有些难度。可以这么理解,meshgrid函数用两个坐标轴上的点在平面上画网格。用法:[X,Y]=meshgrid(x,y)[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的[X,Y,Z]......
  • Python scipy.ndimage.find_objects用法及代码示例
    用法scipy.ndimage.find_objects(input,max_label=0)在标记数组中查找对象。参数:input:整数数组包含由不同标签定义的对象的数组。值为0的标签将被忽略。max_label:整数,可选要在输入中搜索的最大标签。如果没有给出max_label,则返回所有对象的位置。object_slices:元组......
  • 基于Python GDAL为长时间序列遥感图像绘制时相变化曲线图
      本文介绍基于Python中gdal模块,对大量多时相栅格图像,批量绘制像元时间序列折线图的方法。  首先,明确一下本文需要实现的需求:现有三个文件夹,其中第一个文件夹存放了某一研究区域原始的多时相栅格遥感影像数据(每一景遥感影像对应一个时相,文件夹中有多景遥感影像),每一景遥感影像......