python项目为什么用WSGI

小背景

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值