用gunicorn+gevent启动Flask项目
转自:https://blog.csdn.net/dutsoft/article/details/51452598
Flask,webpy,Django都带着 WSGI server,当然性能都不好,自带的web server 更多的是测试用途。线上发布时,则使用高性能的 wsgi server或者是联合nginx做uwsgi 。
greenlet是一个轻量级的协程库。gevent是基于greenlet的网络库。
guincorn是支持wsgi协议的http server,gevent只是它支持的模式之一 ,是为了解决django、flask这些web框架自带wsgi server性能低下的问题。它的特点是与各个web框架结合紧密,部署特别方便。
gunicorn安装和使用
安装
pip install gunicorn
启动
gunicorn code:application
其中code就是指python程序代码code.py,application就是那个wsgi func的名字。这样运行的话, gunicorn 默认作为一个监听 127.0.0.1:8000 的web server,可以在本机通过: http://127.0.0.1:8000 访问。
设置监听端口
如果要通过网络访问,则需要绑定不同的地址(也可以同时设置监听端口)。
gunicorn -b 127.0.0.1:8080
使用多进程
在多核服务器上,为了支持更多的并发访问并充分利用资源,可以使用更多的 gunicorn 进程。
gunicorn -w 8 code:application
这样就可以启动8个进程同时处理HTTP请求,提高系统的使用效率及性能。
配合gevent
另外, gunicorn 默认使用同步阻塞的网络模型(-k sync),对于大并发的访问可能表现不够好, 它还支持其它更好的模式,比如:gevent或meinheld。
# gevent
gunicorn -k gevent code:application
- 1
- 2
指定配置文件
以上设置还可以通过 -c 参数传入一个配置文件实现。
gunicorn - gun.conf code:application
# cat gun.conf
import os
bind = '127.0.0.1:5000'
workers = 4
backlog = 2048
worker_class = "sync"
debug = True
proc_name = 'gunicorn.proc'
pidfile = '/tmp/gunicorn.pid'
logfile = '/var/log/gunicorn/debug.log'
loglevel = 'debug'
关于gevent
gevent是一个基于libev的并发库。它为各种并发和网络相关的任务提供了整洁的API。gunicorn对于“协程”也就是Gevent的支持非常好。
gevent程序员指南:gevnet指南
gevent.monkey介绍详见:关于gevent monkey。
简单的Flask应用
Flask是一个轻量级的Web框架,核心简单而易于扩展。Flask介绍详见:Flask文档。
用Flask简单写了一个web例子,如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
用gunicorn启动Flask应用
配置文件gun.py
import os
import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing
debug = True
loglevel = 'debug'
bind = '0.0.0.0:8800'
pidfile = 'log/gunicorn.pid'
logfile = 'log/debug.log'
#启动的进程数
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'gunicorn.workers.ggevent.GeventWorker'
x_forwarded_for_header = 'X-FORWARDED-FOR'
使用gunicorn来启动
gunicorn -c gun.py hello:app
单纯的flask 自带的web服务器做下测试,会看到压力大的时候出现socket的问题,因为他是单进程单线程的。使用gunicorn来启动,响应速度和能力提升显著。
配置中workers指定启动的进程数。cpu的损耗是平均到各个进程。workers的值一定不要过大,毕竟多进程对于系统的调度消耗比较大。
用gunicorn+gevent启动Flask项目的更多相关文章
- web 部署专题(二):gunicore 并发部署(用gunicorn+gevent启动Flask项目)
转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...
- CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目
原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...
- Ubuntu16.04下搭建mysql + uwsgi + nginx环境启动flask 项目
1.安装mysql Sudo apt-get install mysql 配置mysql的数据存储路径,默认在 /var/lib/mysql sudo cp -R /var/lib/mysql/* / ...
- [傻瓜式一步到位] 阿里云服务器Centos上部署一个Flask项目
网络上关于flask部署Centos的教程有挺多,不过也很杂乱. 在我第一次将flask上传到centos服务器中遇到了不少问题,也费了挺大的劲. 在参考了一些教程,并综合了几个教程之后才将flask ...
- centOS7 flask项目布署
先用1张图表示centOS布署flask的关键点,以及可能遇到的问题,及解决办法. 图片看不清,可以[下载]下来看,清晰度能够看清字 [目标] 局域网内,通过url可以访问flask编写的api 更新 ...
- 通过uwsgi+nginx启动flask的python web程序
通过uwsgi+nginx启动flask的python web程序 一般我们启动python web程序的时候都是通过python直接启动主文件,测试的时候是可以的,当访问量大的时候就会出问题pyth ...
- 解决 Flask 项目无法用 .env 文件中解析的参数设置环境变量的错误
在 Windows 上启动 Flask 项目时,工作目录有 UTF-8 编码的 .env 文件,里面配置的环境变量在 Python2 中识别为 Unicode 类型,导致下述错误: * Serving ...
- nginx + gunicorn + flask项目发布
程序安装(linux mint) gunicorn安装:pip install gunicorn nginx安装:sudo apt-get install nginx 配置 nginx默认配置信息在/ ...
- gunicorn启动flask项目的坑
问题描述:项目用的是flask框架,在项目上线的时候,服务器上是使用gunicorn来启动项目的.但是上线之后,发现服务成功启动了,也有正确的返回值,但是没有生成日志,而用python来启动服务的时候 ...
随机推荐
- unity, access scene ambient
lighting面板里设置的ambient color,在shader里访问是通过UNITY_LIGHTMODEL_AMBIENT这个变量. 它定义在UnityShaderVariables.cgin ...
- 让 Vivado有Zybo Board的配置文件
Zybo Board开发记录: 让 Vivado有Zybo Board的配置文件 由 judyzhong 于 星期三, 07/13/2016 - 10:41 发表 本文转载自:coldnew's bl ...
- 第一个EJB示例
FirstEJB2.0.zip Eclipse + JBoss 5.1 Ejb3Example.zip Eclipse + JBoss 7.1 注意点: 1. jboss 增加用户: D:\DevPr ...
- dedecms使用
使用到了dedecms内容管理系统,遇到两个问题: 1.点击登录后,没有登录进去也没有任何提示,一片空白 解决办法:我是把网站从云主机拷贝下来的,但是忘了云主机上的数据库密码和自己本地的数据库密码不一 ...
- Oracle之批量生成数据
一.引言 由于测试程序,需要大量的数据 二.方法 1.pl/sql的Generate Data,在tool菜单中可以找到,但是我这里不能用,老是出现错误,应该是软件的原因,但是没找到解决办法,如下图: ...
- 通过exists判断数据,并查找存在的数据
----通过exists判断数据,并查找存在的数据---以scott用户的emp 及dept表为例 select * from emp; select * from dept; ---查找emp表中的 ...
- 动态加载图片的Adapter
package com.example.cc.ecustapp.Adapter; import android.app.Activity;import android.content.Context; ...
- Linux制作wifi热点/无线路由
参考: http://blog.csdn.net/u011641885/article/details/495121991.工具/原料 有无线网卡(usb接口的RT3070无线网卡).有线网卡的 ...
- C#反射Assembly 详细说明,有项目例子
1.对C#反射机制的理解2.概念理解后,必须找到方法去完成,给出管理的主要语法3.最终给出实用的例子,反射出来dll中的方法 反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等 ...
- Python中3元运算符的实现
这是今天在温习lambda表达式的时候想到的问题,众所周知C系列语言中的 三元运算符(?:)是一个非常好用的语句, 关于C中的三元运算符表达式1?表达式2:表达式3 那么在python应该如何实现呢, ...