引言
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+gevent启动Flask项目 中的开头,其实在此之前我是不知道这些东西的,因为项目需求需要部署,所以我才去了解并记录一下使用blog,所以以下是我的总结。
gunicorn安装和使用
首先我们需要通过pip安装gunicorn服务,命令为:
pip install gunicorn
这里我直接在pycharm提供的terminal终端中进行安装,安装成功后就可以进行相关配置了。
这里我列举出一些比较常用的命令与参数:
参数介绍 | 参数说明 |
---|---|
-c / --config | CONFIG,Gunicorn配置文件路径 |
-b / --bind | ADDRESS,Gunicorn绑定服务器套接字,Host形式的字符串格式。Gunicorn可绑定多个套接字 |
–backlog | 未决连接的最大数量,即等待服务的客户的数量,必须是正整数,一般不怎么用 |
-w / --workers | INT,用于处理工作进程的数量,为正整数,默认为1。worker推荐的数量为当前的CPU个数*2 + 1 |
-k / --worker-class | 要使用的工作模式,默认为sync,同样还可以使用的有eventlet,gevent,tornado,gthread和gaiohttp |
–access-logfile | 要写入的访问日志目录 |
–error-logfile / --log-file | 要写入错误日志的文件目录 |
threads | 处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1 |
上述应该算是比较常用的命令了,其它的我还暂时没用过,以上的说明都摘自Gunicorn-配置详解,其中很多的配置信息其实可以做成一个config配置文件,放在当前项目环境下的根目录下面,比如我做了一个gun.conf文件,我直接将上述所有的配置信息写进了该文件中,那么到时候需要调用的时候就是改变注释来选择功能,这里的一部分配置信息为:
#监听本机的5000端口
bind='0.0.0.0:8081'
#开启4个进程
workers=4
#线程
#threads=8000
keepalive=1
#在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
daemon=True
worker_connections=8048
#worker_connections最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
graceful_timeout=0
#graceful_timeout优雅的人工超时时间,默认情况下,这个值为30。收到重启信号后,工作人员有那么多时间来完成服务请求。在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死
limit_request_line=8048
#limit_request_line HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。值是0~8190的数字。此参数可以防止任何DDOS攻击
backlog=8048
#工作模式为gevent
worker_class="gevent"
debug=True
chdir = '/usr/test/1234/'
proc_name='gunicorn.pid'
#记录PID
pidfile='debug.log'
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
#设置gunicorn访问日志格式,错误日志无法设置
errorlog = "./errlog"
accesslog = "./logs"
另外关于这些参数,其实我们还可以在终端输入gunicorn -h 来显示,然后就能看到全部的命令,因为我上一张图片是在Windows下的,但gunicorn会报错,说没有fcnl模块,然后看资料后发现即使有了这个模块,结果还是一样,所以我直接拿服务器看了,如下:
然后以上便是gunicorn的常用基本配置以及技巧。
部署flask项目
当我们将上述环境还有文件都配置好后,进入服务器,如果上述代码没有绑定端口号,这里可以用命令去绑定一下。然后我们就进入当前python项目环境目录下,因为我服务器之前已经安装好了python,这里就不演示安装了。相应的命令为:
ps aux | grep gunicorn # 查看当前有没有启动gunicorn的进程,如果有就kill掉
kill -9 编码 # 杀死相应进程
gunicorn -k gevent -c gun.conf 项目文件:项目名 # 用gunicorn启动项目
上述因为在初始配置中我们设置了4个worker,所以上述才会显示有四个进程,然后可以kill掉再重新启动,我这里就不演示了,主要说明一下项目文件即是主程序的运行入口,我们在哪个文件中能启动项目,那么就是用它,也可以说是main函数在的地方,比如我这里文件叫answermain,然后flask的项目一般是以app来实例一个对象,所以一般项目名都是app。
所以至此,部署已经成功了,我们就可以访问设置的端口进行查看,然后这里基本不会有什么比较大的bug,当下次如果我们需要加上Nginx的时候,那个时候或许就会有问题了,另外下一篇我会从Nginx安装到部署做做记录,这里先留一个伏笔