Python WSGI HTTP Server - Gunicorn
基本概念
Gunicorn,也称为“Green Unicorn”,是一个Python WSGI HTTP Server,用于运行Python Web应用程序。WSGI(Web Server Gateway Interface)是Python应用程序和Web服务器之间的一个接口,允许应用程序和服务器进行交互。Gunicorn常常与Django、Flask等Web框架一起使用,但它可以与任何WSGI兼容的应用程序一起工作。
以下是关于Gunicorn的详细介绍:
1. 主要特性:
-
轻量级: 它是纯Python编写的,没有其他外部依赖。
-
性能优化: 能够运行多个工作进程,充分利用多核CPU。
-
兼容性: 它遵循WSGI标准,与大多数Python Web框架兼容。
-
简单性: 配置和部署都很简单。
2. 工作方式:
Gunicorn使用一个主进程和多个工作进程的模型。主进程管理工作进程,工作进程处理到来的Web请求。每个工作进程是单线程的,并且完全独立,因此可以在多个CPU核心上并行运行。
3. 为什么选择Gunicorn?:
-
并发: 利用多进程模型,可以有效地处理多个并发连接。
-
简易的集成: 与NGINX或Apache等Web服务器一起工作效果很好。
-
健壮性: 如果一个工作进程失败,其他进程仍然可以继续处理请求。
4. 使用和配置:
启动Gunicorn非常简单。例如,如果有一个Flask应用名为app.py,可以这样启动:
gunicorn app:app
在上述命令中,第一个app指的是文件名,而第二个app是文件内的Flask应用实例。
Gunicorn提供了很多命令行选项,允许我们调整工作进程数、绑定地址和端口、设置超时等。
5. 与其他WSGI服务器的比较:
虽然Gunicorn是WSGI服务器中的流行选择,但还有其他选项如uWSGI、mod_wsgi等。不同的项目可能更适合使用不同的服务器,取决于部署需求和个人/团队的喜好。
6. 注意事项:
-
尽管Gunicorn可以直接面向公网,但建议将其放置在反向代理(如NGINX)后面,以提供额外的缓冲和安全性。
-
定期检查Gunicorn的更新,并确保使用最新版本,以获得性能和安全性的改进。
-
对于需要长时间运行的请求或WebSockets等特定用例,Gunicorn可能不是最佳选择,需要考虑其他解决方案。
总之,Gunicorn是一个在Python Web开发社区中广受欢迎的WSGI服务器,它结合了简单性、性能和健壮性。
常用启动命令
gunicorn -w 1 -b 0.0.0.0:5000 app:app --daemon
当运行上述的 gunicorn 命令,实际上是在启动一个 Gunicorn服务器,用于为Python web应用程序提供服务。让我们详细解析这个命令:
-
gunicorn: 这是实际的命令,它启动了Gunicorn服务器。 -
-w 1or--workers 1: 这指定了工作进程的数量。在这种情况下,有一个工作进程来处理请求。在生产环境中,我们可能希望增加工作进程的数量,尤其是对于I/O密集型任务,使其与可用的CPU核心数相匹配(或稍微多一些)。 -
-b 0.0.0.0:5000or--bind 0.0.0.0:5000: 这告诉Gunicorn在哪里监听传入的请求。在这种情况下,它绑定到所有可用的IP地址 (0.0.0.0) 并在端口5000上监听。0.0.0.0: 表示Gunicorn应该监听来自任何IP地址的请求,这使得应用程序可以从任何机器上被访问。5000: 这是Gunicorn应该监听的端口号。
-
app:app: 这指定了WSGI应用程序的位置。在这种情况下,它告诉Gunicorn在app模块(通常是app.py文件)中查找名为app的WSGI应用实例。 -
--daemon: 这个参数告诉Gunicorn在后台运行,这意味着命令会立即返回,Gunicorn服务器将在后台进程中运行。
总结一下:这个命令使用一个工作进程在所有IP地址的端口5000上启动了Gunicorn服务器,并在后台运行它。服务器加载的WSGI应用程序位于名为 app 的模块中,并命名为 app。
后台启动后如何查看日志
当使用 gunicorn 并使用 --daemon 标志来后台运行它时,进程会转到后台模式。在这种情况下,我们可能希望能够查看应用的日志。
以下是关于日志的一些建议:
-
指定日志文件: 可以使用
--access-logfile和--error-logfile参数来分别指定访问日志和错误日志的文件位置。gunicorn -w 1 -b 0.0.0.0:5000 app:app --daemon --access-logfile /path/to/access.log --error-logfile /path/to/error.log然后,可以使用
tail命令来查看这些日志:tail -f /path/to/access.log或
tail -f /path/to/error.log -
查看进程: 如果没有指定日志文件,可以使用以下命令查看与
gunicorn相关的进程:ps aux | grep gunicorn但这只会显示进程信息,而不是实际的日志。
-
不使用守护模式: 如果只是在开发环境中,或者只是想快速查看日志,也可以考虑不使用
--daemon标志来运行gunicorn。这样,日志信息将直接输出到控制台。 -
集成日志系统: 对于生产环境,可能希望使用像
logrotate这样的工具来管理我们的日志文件,以确保它们不会变得太大。也可以考虑使用日志集成服务,如Sentry、Datadog或Loggly,以便在集中位置管理和监控日志。
总的来说,要确保指定了日志文件位置,这样就可以很容易地查看和管理日志。
相关文章:
Python WSGI HTTP Server - Gunicorn
基本概念 Gunicorn,也称为“Green Unicorn”,是一个Python WSGI HTTP Server,用于运行Python Web应用程序。WSGI(Web Server Gateway Interface)是Python应用程序和Web服务器之间的一个接口,允许应用程序和…...
[论文笔记]GPT-2
引言 今天继续GPT系列论文, 这次是Language Models are Unsupervised Multitask Learners,即GPT-2,中文题目的意思是 语言模型是无监督多任务学习器。 自然语言任务,比如问答、机器翻译、阅读理解和摘要,是在任务相关数据集上利用监督学习的典型方法。作者展示了语言模型…...
第十三届蓝桥杯模拟赛第三期
A.填空题 问题描述 请问十六进制数 2021ABCD 对应的十进制是多少? 参考答案 539077581 import java.math.*; public class Main {public static void main(String[] args) {String strnew BigInteger("2021ABCD",16).toString(10);System.out.printl…...
代碼隨想錄算法訓練營|第四十四天|01背包问题 二维、01背包问题 一维、416. 分割等和子集。刷题心得(c++)
目录 01背包問題 - DP二維數組 01 背包問題描述 暴力解 動態規劃 確認DP數組以及下標的含意 確定遞推公式 01背包问题 一维 一维DP 数組(滾動数組) 動態規劃五部曲 定義DP数組以及其下標含意 遞推公式 初始化 遍歷順序 讀題 416. 分割等和子集 自己看到题目的第…...
【算法训练-回溯算法 零】回溯算法解题框架
抽象地说,解决一个回溯问题,实际上就是遍历一棵决策树的过程,树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍,把叶子节点上的答案都收集起来,就能得到所有的合法答案。站在回溯树的一个节点上,你…...
GAN.py
原代码地址:github.com/zqhang/MTGFLOW 目录 def ConvEncoder() def ConvDecoder() class CNNAE(torch.nn.Module): class R_Net(torch.nn.Module): class D_Net(torch.nn.Module): def R_Loss() def D_Loss()…...
C语言动态内存管理
1.为什么要动态内存分配? int val 20; int a[10]{0};上面我们声明并定义了一个大小为4字节的整型变量,一个容量为10*4字节的整型数组。 开辟方式:我们在栈上开辟。 开辟空间的方式有两个特点: 1. 空间开辟 大小是固定 的。 2. 数组在申明…...
小红书商品详情API接口(商品详情页面数据接口)
小红书商品详情API接口(商品详情页面数据接口 小红书商品详情API接口(商品详情页面数据接口)代码对接如下: 1.公共参数 名称类型必须描述keystring是get请求方式拼接在url中,点击获取api_namestring是 api接口名称cachestrin…...
nginx配置文件的内容解释和简化方案
文章目录 配置文件内容理解配置文件精简nginx.confapp1.conf 配置文件内容理解 events {worker_connections 1024; }http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;client_max_body_size 50m;client…...
Java设计模式之访问者模式(Visitor Pattern)
访问者模式(Visitor Pattern)是一种行为型设计模式,它允许在不修改现有对象结构的情况下定义新的操作。该模式将操作封装在一个访问者对象中,使得可以在不改变被访问对象的类的前提下,通过访问者对象对被访问对象进行新…...
others-AppLovin广告接入
title: others-AppLovin广告接入 categories: Others tags: [广告, AppLovin] date: 2023-10-20 10:07:01 comments: false mathjax: true toc: true others-AppLovin广告接入 前篇 官方 - https://www.applovin.com/ Android sdk - https://github.com/AppLovin/AppLovin-MAX…...
ESP32集成开发环境Espressif-IDE安装 – Windows
陈拓 2023/10/15-2023/10/16 1. 概述 Espressif IDE是一个基于Eclipse CDT的集成开发环境(IDE),用于使用ESP-IDF框架开发物联网应用程序。这是一个专门为ESP-IDF构建的独立定制IDE。Espressif IDE附带了IDF Eclipse插件、重要的Eclipse CDT插…...
python之if else语句介绍
python之if else语句介绍 在Python中,if和else是两种重要的控制流语句,它们用于根据特定的条件来执行不同的代码块。以下是它们的用法和详细介绍: 1)if语句 if语句用于在满足某种条件时执行特定的代码块。它的基本语法如下&#…...
Java版ORM最初雏形
经过一个晚上的加班,终于把ORM初步结构工程搭好了。工程依赖有点难用,编辑器提示比VS差很多。 首先LIS.Core创建一个最初的容器雏形,先能反射得到对象给ORM获得数据库驱动 然后ORM创建数据库驱动差异接口,不同数据库实现接口后配…...
黎曼几何与切空间之间的投影
公式: 从黎曼空间投影到切空间,其中P为黎曼均值,也是切空间的参考中心点,Pi是要投影到切空间的点。 从切空间投影回来,其中Si为切空间中的向量。 function Tcov CovToTan(cov,Mcov)Cm12 Mcov^(-1/2);X_new logm(Cm…...
【Tomcat】为Tomcat服务配置本地Apr库以提升性能
关于 apr 和 apr-util 对 Tomcat 服务的性能提升的说明: 要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本…...
普通人在当前大环境下——少看宏观,多看具体
前言 宏观叙事,简而言之,就是从宏观把握历史社会的发展,寻找其中永恒的共性。我们大概听过此类的话:贸易战导致本地经济下滑、气候变化是因为过去几十年的工业发展、大环境不行导致不赚钱。此类叙事方式,身边人聊的甚欢,在媒体、社交圈、日常社群交流中,随处可见。以前…...
用echarts在vue2中实现3d饼图
先看效果,再看文章: 一、安装插件 3d的图不仅用到echarts,还用到了echarts-gl,因此都需要安装一下哦~ npm install echarts npm install echarts-gl2.0.9 //可以指定版本,也可不指定二、在main.js中引入 import * …...
低代码助力软件开发
低代码开发工具正在日益变得强大,它正不断弥合着前后端开发之间的差距。对于后端来说,基于低代码平台开发应用时,完全不用担心前端的打包、部署等问题,也不用学习各种框架(Vue、React、Angular等等)&#x…...
C嘎嘎之类和对象上
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:掌握类的引用和定义,熟悉类成员函数的…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
