用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的值一定不要过大,毕竟多进程对于系统的调度消耗比较大。

转载于:https://www.cnblogs.com/fengff/p/9225859.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值