python项目为什么用WSGI

news2024/9/20 14:42:05

小背景

Java用的时间久了,web项目启动的时候直接启动主程序就行,因为spring web项目内置了Tomcat web服务器,服务器的配置一般也是采用默认的配置,所以很少关注底层实现,关注点主要在应用程序功能。

初学python的时候,创建web应用程序,通过命令之前启动就行,然后就可以访问了,以为底层也是内置了web服务器(确实有内置,后来才知道仅限于调式)。每次启动的时候总会有一行警告。刚开始学习的时候没有关注,只要提测后,发现根本没有并发,然后关注到WSGI的作用

运行python项目

flask项目

翻译,这是开发环境的服务器,生产环境请用WSGI的服务替换

Django项目

翻译,这是一个开发环境的服务器

总结
  • python项目自带的服务器,主要用于开发环境,默认情况下都是单线程,处理能力有限
  • Flask、Django和Fastapi都是开发web服务的框架,而非web服务器,为了方便本地开发内置了一个简易的web服务。

web服务器

web服务器特点:

  • 接受客户端(浏览器,app,小程序等)发送的请求
  • web服务器通常都会支持高并发(Nginx上万级别的并发) 很多地方都是用到了Nginx作反向代理Web服务器,

了解下WSGI、uWSGI、Gunicorn之间关系

WSGI (Web Server Gateway Interface)
  • 定义:WSGI 是一种规范,定义了 Python Web 服务器和 Web 应用或框架之间的接口。它允许不同的 Web 服务器和 Web 应用框架之间进行通信。
  • 用途:WSGI 使得 Web 应用开发者可以专注于业务逻辑和内容生成,而不必处理底层的网络细节(如 HTTP 请求处理和响应生成)。
  • 兼容性:WSGI 是 Python 标准库的一部分,几乎所有的 Python Web 框架(如 Django、Flask 等)都遵循 WSGI 规范。

uWSGI
  • 定义:uWSGI 是一个 Web 服务器,实现了 WSGI 规范。它是一个多功能的服务器,可以作为独立服务器或嵌入式服务器运行。
  • 用途:uWSGI 可以处理 HTTP、FastCGI、uwsgi 协议等多种协议,支持多种语言(包括 Python、Ruby、PHP 等)。它通常用于生产环境中,作为反向代理服务器或应用服务器。
  • 特点:uWSGI 以其高性能和低资源消耗著称,支持多种工作模式(如同步、异步、多线程等)。
Gunicorn
  • 定义:Gunicorn 是一个 Python WSGI HTTP 服务器,也称为“绿色独角兽”。它是一个预派生(pre-fork)工作模式的服务器,适用于 UNIX 系统。
  • 用途:Gunicorn 主要用于运行 Python Web 应用,它可以与各种 Web 框架(如 Django、Flask 等)兼容。Gunicorn 通常作为 Web 应用的直接服务器,或与 Nginx 等反向代理服务器一起使用。
  • 特点:Gunicorn 以其简单易用和高性能著称,支持多进程和多线程工作模式。它可以在命令行中配置,也可以通过配置文件进行更复杂的设置。
关系
  • WSGI:是一种规范,定义了服务器和应用之间的通信方式。Gunicorn 和 uWSGI 都是实现了 WSGI 规范的服务器。
  • uWSGI:是一个多功能的服务器,可以作为独立服务器或嵌入式服务器运行,支持多种协议和语言。
  • Gunicorn:是一个更轻量级的服务器,专注于 Python Web 应用,通常与 WSGI 应用一起使用。
总结

WSGI web服务器,本质上是一个TCP服务器,监听在特定的端口上。支持HTTP协议,能够解析HTTP请求报文,能够按HTTP协议将响应数据封装为报文并返回给浏览器。实现了WSGI协议,该协议约定了和应用程序之间的接口

Gunicorn应用

命令行方式之间启动python项目

gunicorn -w 4 -b 0.0.0.0:9966 app:app -w 4表示启动4个工作进程,-b 0.0.0.0:9966表示监听本地8000端口

  • 协议tcp
  • 状态LISTEN
  • 本地地址*:9966(监听所有IP地址的9966端口)
  • 远程地址*:*(不特定,表示不监听任何远程地址)
  • 用户users:(("gunicorn",pid=6457,fd=5),("gunicorn",pid=6456,fd=5))

这意味着有两个进程(PID 6457和6456)正在监听本地的9966端口,等待TCP连接。这两个进程都运行着gunicorn程序,并且每个进程都使用文件描述符5来监听这个端口。

同时多个应用程序监听9966端口号

作者:海边捡石子
链接:https://juejin.cn/post/7392267900102361099

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1933562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DDei在线设计器-HTML渲染

Html渲染 HtmlViewer插件通过将一个外部DIV附着在图形控件上,从而改变原有图形的显示方式。允许使用者自己定义HTML通过HTML元素。本示例演示了通过Html来扩展渲染图形,从而获得更加丰富的图形展现。 通常情况下,我们创建的图形控件&#xff…

Wireshark抓取HTTP

HTTP请求响应 使用wireshark抓取 本地机器是192.168.33.195,远程机器是192.168.32.129,远程HTTP服务端口是9005 TCP/IP实际共分为4层,抓包信息中可以看到各层的数据,最上面的数据帧包含了所有数据。 附:抓取本地H…

【Harmony】SCU暑期实训鸿蒙开发学习日记Day2

目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记,杂乱,误点的师傅可以掉了&#x1…

体验智慧校园学工管理的社团类型功能

在智慧校园学工管理的框架下,社团类型的精细化管理成为了激发学生兴趣、促进社团多样性与规范性的关键。这一功能的核心在于构建一个清晰的社团分类体系,确保每一种社团都能在其所属领域内蓬勃发展,同时,也便于校园管理者进行有效…

C#与C++交互开发系列(一):引言:为什么需要C#与C++交互开发

C#与C交互开发系列(一):引言:为什么需要C#与C交互开发 欢迎来到C#与C交互开发系列博客的第一篇。在这个系列中,我们将探讨如何在C#与C之间实现互操作性,并逐步深入理解其应用场景和技术实现。本文将介绍什么…

植物大战僵尸全新版本Q版少女助阵好感度系统加持安卓winmac全兼容

植物大战僵尸全新版本Q版少女助阵好感度系统加持安卓winmac全兼容 链接: https://pan.baidu.com/s/11UFm4r8FKhkGAxM8dLVA8Q?pwdqnx8 提取码: qnx8

C++ ───List的使用

目录 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

算法——双指针(day2)

目录 202.快乐数 题目解析: 算法解析: 代码: 11.盛最多水的容器 题目解析: 算法解析: 代码: 202.快乐数 力扣链接:202.快乐数 题目解析: 本文中最重要的一句话就是重复平方和…

Elasticsearch基础(三)

目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.3.精准查询 1.4.地理坐标查询 1.5.复合查询 2.搜索结果处理 2.1.排序 2.2.分页 2.3.高亮 2.4.总结 3.RestClient查询文档 3.1.快速入门 3.2.match查询 3.3.精确查询 3.4.布尔查询 3.5.排序、分页 3.6.…

C语言 | Leetcode C语言题解之第233题数字1的个数

题目: 题解: int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中,可以发现 k 并没有被直接使用到(都是使用 10^k)// 但为了让代码看起来更加直观,这里保留了 klong long mulk 1;int ans 0;f…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据,导致JSON数据大小过大,带宽大小不足,导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小,从而提高传输效率 服务器端压缩 springboot项目配置application文件,通过…

零基础学习Python(三)

1. 多重继承 一个子类可以继承多个父类,这与一些编程语言的规则不通。 如果多个父类中有同名的变量和方法,子类访问的顺序是按照继承时小括号里书写的顺序进行访问的。 可以用issubclass(B, A)方法判断B是否为A的子类。 2. 绑定 类中的方法通过参数s…

【代码随想录笔记】数组

目录 1、二分查找 2、移除元素 3、有序数组的平方 4、螺旋矩阵II 1、二分查找 对于二分搜索法&#xff0c;有两个边界问题是容易把握不准的 1. 是left < right还是left < right 2. 当nums[middle] > target时&#xff0c;需要更新右边界&#xff0c;那是right …

【深度学习入门篇 ⑥】PyTorch搭建卷积神经网络

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

‍我想我大抵是疯了,我喜欢上了写单元测试

前言 大家好我是聪。相信有不少的小伙伴喜欢写代码&#xff0c;但是对于单元测试这些反而觉得多此一举&#xff0c;想着我都在接口文档测过了&#xff01;还要写什么单元测试&#xff01;写不了一点&#xff01;&#xff01; 由于本人也是一个小小程序猿&#x1f649;&#xf…

Unity | Shader基础知识(第十八集:Stencil应用-透视立方盒子)

目录 一、前言 二、场景布置 三、 shader部分 1.图片的部分 2.图片部分纯净代码 3.遮罩部分复习 4.深度写入 ZWrite 5.颜色遮罩ColorMask 6.遮罩纯净代码 四、场景中shader使用 五、作者的碎碎念 一、前言 因为这个内容稍微有点多&#xff0c;我尽力讲清楚了&#x…

VAE论文阅读

在网上看到的VAE解释&#xff0c;发现有两种版本&#xff1a; 按照原来论文中的公式纯数学推导&#xff0c;一般都是了解生成问题的人写的&#xff0c;对小白很不友好。按照实操版本的&#xff0c;非常简单易懂&#xff0c;比如苏神的。但是却忽略了论文中的公式推导&#xff…

jquery中pdf在页面的显示和导出

jquery中pdf在页面的显示和导出 01 显示pdf01 .pdf结尾在线接口显示到页面 &#xff08;pdf.js库怎么安装及使用&#xff09;&#xff1a;只显示一页02 如何用PDF.JS显示整个PDF (而不仅仅是一页)&#xff1f;03 jQuery实现在线预览PDF文件(通过a标签链接跳转)&#xff1a; 02 …

【网络安全】PostMessage:分析JS实现XSS

未经许可&#xff0c;不得转载。 文章目录 前言示例正文 前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口&#xff08;例如&#xff0c;来自同一域名下的不同页面或者不同域名下的跨域页面&#xff09;进行通信&#xff0c;而无需通过服务器…

【STM32 HAL库】全双工DMA双buffer的I2S使用

1、配置I2S 我们的有效数据是32位的&#xff0c;使用飞利浦格式。 2、配置DMA **这里需要注意&#xff1a;**i2s的DR寄存器是16位的&#xff0c;如果需要发送32位的数据&#xff0c;是需要写两次DR寄存器的&#xff0c;所以DMA的外设数据宽度设置16位&#xff0c;而不是32位。…