Gunicorn

gunicorn是一个基于python的Web Servers Gateway Interface for unix; 就是web 服务器端接收请求和python app 应用的一个桥梁;
如果不用gunicorn,只是使用Flask,对于大量和同时的请求,就会奔溃和出现错误;而gunicorn就是对于大量高并发的请求,能够实现请求到达服务器,以及作出相应,并能根据负载需求,及时增大/减少worker,做到管理协调的作用。

基本介绍

gunicorn是启动app程序的一种方式,不同于直接在main文件中启动app程序,这样更方便与管理;
三种启动方式:

  • workers模式

    每个worker都是一个加载python应用程序的UNIX进程 worker之间没有共享内存

    建议workers 数量是 (2*CPU) + 1;

  • 多线程模式

    gunicorn 还允许每个worker拥有多个线程,在这种模式下,每个worker都会加载一次,同一个worker生成的每个线程共享相同的内存空间,使用threads模式,每一次使用threads模式,worker类就会是gthread;

    gunicorn -w 5 --threads=2  main:app
    #等同于
    gunicorn -w 5 --thread=2 --worker-class=gthread main:app
    
  • 伪线程 gevent (协程)

    gunicorn --worker-class=gevent --worker-connections=1000 -w 3 main:app
    

    work-connections 是对gevent worker类的特殊设置;建议workers数量仍然是 (2*CPU) + 1;

    在这种情况下,最大的并发请求数 是3000(3个worker * 1000连接/worker).

基本使用

使用配置文件方式启动

gunicorn --config=config.py myapp.test:app
#myapp.test为文件,第二个指的是flask应用的名字;

关闭gunicorn

pstree -ap|grep gunicorn #寻找masterpid
kill -HUP 9479 #重启Gunicorn任务
kill -9 9479 #退出gunicorn任务
  • gunicorn address used
    如使用gunicorn启动,即不使用mian启动,不需要在使用app.run();
#gunicorn 启动
if __name__ != '__main__':#日志的绑定gunicorn_logger = logging.getLogger(‘gunicorn.error’)#获得gunicorn的logger#将gunicorn的logger和flask app的logger绑定在一起app.logger.handlers = gunicorn_logger.handlers#将绑定的logger 的level设置成gunicorn logger的level, 因为最终输出的log level是在gunicorn中配置的app.logger.setLevel(gunicorn_logger.level)#启动分析任务crossline_t = threading.Thread(target=crossline_analyze.task_start)crossline_t.start()
  • 退出gunicorn
    根据pid文件中的pid号,来进行进程结束

    kill -QUIT pid
    kill -TERM pid
    

ref:

gunicorn 配置文件
gunicorn 文档
Gunicorn介绍与压测
gunicorn日志绑定
参考01
pid文件的作用

常见错误

  • No module named <module_name>" while running gunicorn
    在gunicorn中无法找到celery,通过查看which gunicorn可知默认调用的是local下的gunicorn;卸载重新在安装了celery的虚拟环境下安装gunicorn;
    在使用时,需要指明gunicorn在虚拟环境下的具体位置;
    若出现bad interpreter错误,需要进行bin/gunicorn中,编辑首行的python解释器路径;
    将虚拟环境下的gunicorn软链接至local路径下,则使用时无须指明具体路径;

  • gunicorn.errors.HaltServer
    在启动时加上--preload可显示具体错误;

【gunicorn】gunicorn基本使用相关推荐

  1. python diango 并发_利用gunicorn提高django的并发能力

    引言 手头上的项目有一些采用django框架编写, 如果说并发量比较小的时候简单的runserver是可以应对的. 那么当并发达到一两千的时候,该怎么提高django的并发能力呢? Overview ...

  2. python flask gunicorn nginx 部署

    WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议.WSGI协议就是用来统一这两者的接口的. ...

  3. 【Gunicorn】gunicorn配置文件详解

    python常见的web部署搭配nginx+gunicorn,下面记录一下gunicorn的配置使用. 安装gunicorn pip install gunicorn gunicorn -h # 查看 ...

  4. 使用uwsgi和gunicorn部署Django项目

    https://uwsgi-docs.readthedocs.io/en/latest/Management.html https://uwsgi-docs.readthedocs.io/en/lat ...

  5. 利用flask写的接口(base64, 二进制, 上传视频流)+异步+gunicorn部署Flask服务+多gpu卡部署

    一.flask写的接口 1.1 manage.py启动服务(发送图片base64版) 这里要注意的是用docker的话,记得端口映射 #coding:utf-8 import base64 impor ...

  6. Flask 应用部署方式之 Flask+Gunicorn+Nginx

    1. Why Flask+Gunicorn+Nginx Flask+Gunicorn+Nginx是最常用的Flask部署方案,大家深究过为何用这样的搭配么? 1.1 Why? Flask 是一个web ...

  7. supervisor+gunicorn部署python web项目

    有了Nginx,对于Tomcat没有必要详细了解. 有了supervisor,再也没有必要把一个程序设置成服务.驻留进程,supervisor真是一个相见恨晚的好工具. 在Tomcat中,所有的web ...

  8. python之gunicorn的配置

    python常见的web部署搭配nginx+gunicorn,下面记录一下gunicorn的配置使用. 安装gunicorn pip install gunicorn gunicorn -h # 查看 ...

  9. 江在川上曰:云服务器上的flask项目部署(Ubuntu+Flask+Gunicorn+Supervisor+Nginx+Anaconda)

    云服务器上的flask项目部署(anaconda.python.flask等相关安装) 在探索未知的路上走了很多弯路,这里记载了我在阿里云上部署项目切实可行的步骤,当然问题因人而异,没有四海皆适用的准 ...

  10. gunicorn 详解

    Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server. 和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点. gunicorn 安装 ...

最新文章

  1. 关于山东大学(威海)全向组海韵三队提交的 RT-Thread 技术报告中的若干疑点
  2. Dcloud HTML5 监听蓝牙设备 调用 原生安卓实现 - aspirant - 博客园
  3. 彻底理解被称为二叉树神级遍历的莫里斯(Morris)算法
  4. Eureka学习笔记001--Eureka概念和源码分析
  5. 无穷级数判敛方法使用限制
  6. AutoSar软件文档阅读
  7. 计算机如何建立小型服务器,如何将个人PC搭建成小型服务器
  8. vc 写一个计算机功能,VC++的一个实例
  9. qt quick-QML虚拟软键盘V2版本(手机键盘弹出机制)-支持换肤、动态加载移除语言
  10. 文科如何晋级计算机职称,职称的档次是怎么确定来的?
  11. php file_get_contents 失效,phpfile_get_contents返回空无效解决办法_PHP教程
  12. 【数模/预测】灰色预测
  13. 「中国好SaaS」报名进行中!「面基」买方关键决策人
  14. 计算机的字长一定是字节的整数倍,大学计算机应用基础选择题一.doc
  15. stm32l151 ADC通过DMA通道定时采样电池电量
  16. fastTEXT入门自然语言处理NLP
  17. 叠积木/银河系英雄传说[NOI2002]题解
  18. 灵魂拷问:为什么 Java 字符串是不可变的?
  19. 迅为iMX6UL开发板驱动-PWM测试方法
  20. tflearn教程_环境部署——Windows下安装配置tensorflow和tflearn

热门文章

  1. 悼念 Aaron Swartz
  2. 我和朋友们的对话(QQ语录)
  3. Acer宏碁台式电脑如何bios设置u盘启动?
  4. 树莓派4B ROS SLAM 超全总结
  5. Matlab常见报错:错误使用 conv2不支持 N 维数组;cell类型数组不支持运算符
  6. HTML+CSS网站开发兵书
  7. 《图论》— NYOJ 20 吝啬的国度
  8. 戴尔的G15笔记本电脑性能怎么样
  9. 诸葛解析:APP运营的工作职责和指标
  10. Java教程,Java基础教程,2020年全新Java基础学习教程