有域名怎么做公司网站, 上的视频直播下载,农林行业网站开发公司,百度我的订单查询1、WSGI协议
Web框架致力于如何生成HTML代码#xff0c;而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信#xff0c;需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。
2、WSGI容器
常用的WSGI容器有Gunicorn和uWSGI#xff0c;但G…1、WSGI协议
Web框架致力于如何生成HTML代码而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。
2、WSGI容器
常用的WSGI容器有Gunicorn和uWSGI但Gunicorn直接用命令启动不需要编写配置文件相对uWSGI要容易很多
3、gunicorn介绍
gunicorn是一个python Wsgi http server只支持在Unix系统上运行来源于Ruby的unicorn项目。Gunicorn使用prefork master-worker模型在gunicorn中master被称为arbiter能够与各种wsgi web框架协作。
为啥要用 gunicorn
Flask 是一个 Platform他本身并不包括 Web Server为了使用方便Flask 内置了一个 Werkzeug wsgi server 但是这个 server 并不高效。 如果是工业部署的话 就需要用 Gunicorn 去替代掉这个内置的 Wsgi Server.
简单说下几种部署方式
Flask 内置 WebServer Flask App 弱鸡版本的 Server, 单进程单 worker) / 失败挂掉 / 不易 ScaleGunicorn Flask App 多进程多 worker) / 多线程 / 失败自动帮你重启 Worker / 可简单Scale多 Nginx 多 Gunicorn Flask App 小型多实例 Web 应用一般也会给 gunicorn 挂 supervisor
在生产环境中一般都是请求的走向都是 Nginx-gunicorn-flask/django app
4、gunicorn安装
gunicorn安装非常简单使用命令pip install gunicorn即可。一般使用它主要是为使用其异步的worker模型还需要安装对应的异步模块。
$ pip install gunicorn
$ pip install greenlet # 使用异步必须安装
$ pip install eventlet # 使用eventlet workers
$ pip install gevent # 使用gevent workers5、gunicorn使用
这里使用gunicorn来部署一个flask项目举例此处flask框架的使用不过多阐述不是本文的重点。
如下例子保存为app.py
from flask import Flask
app Flask(__name__)app.route(/)
def hello():return Hello World!gunicorn通常使用的参数如下
-c CONFIG, --configCONFIG # 设定配置文件。
-b BIND, --bindBIND # 设定服务需要绑定的端口。建议使用HOST:PORT。
-w WORKERS, --workersWORKERS # 设置工作进程数。建议服务器每一个核心可以设置2-4个。
-k MODULE # 选定异步工作方式使用的模块。在shell中输入你的启动配置比如
gunicorn -w 3 -b 127.0.0.1:8080 app:app
# 此处app:app中第一个app为flask项目实例所在的包第二个app为生成的flask项目实例这样运行正常就可以启动服务器了。
如果要通过网络访问则需要绑定不同的地址也可以同时设置监听端口设置0.0.0.0可以监听到所有ip的请求
gunicorn -b 0.0.0.0:8080 app:app6、绑定端口
linux通常会禁止绑定使用1024以下的端口除非在root用户权限。很多人在使用gunicorn时试图将其绑定到80或者443端口发现无效。如果想绑定到这些端口常见的有如下的几种方法
使用Nginx代理转发。sudo启动gunicorn。安装额外的程序。
7、结束gunicorn服务进程
使用ps -ef | grep gunicorn命令找出gunicorn所有进程。
# ps -ef | grep gunicorn
root 16843 23035 0 Oct14 ? 00:00:02 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app
root 22445 23035 0 Oct04 ? 00:00:15 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app
root 22581 23035 0 Oct11 ? 00:00:05 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app
root 23035 1 0 Sep27 ? 00:04:11 /root/Envs/myflask/bin/python3.6 /root/Envs/myflask/bin/gunicorn -w 3 -b 172.17.0.12:80 app:app然后使用 kill -9 进程ID 命令来杀掉进程注意我们找到主进程杀掉即可子进程会随之结束在上例中主进程号为23035.
# kill -9 23035
# ps -ef | grep gunicorn杀掉进程后稍等几秒再使用ps -ef | grep gunicorn查看发现gunicorn服务进程已全部杀掉。
8、配置文件
通过gunicorn -h可以看到gunicorn有非常多的配置项因此通常会写成一个配置文件来进行配置。
比如gunicorn.conf文件
# gunicorn.confbind 0.0.0.0:5000
workers 4
backlog 2048
pidfile log/gunicorn.pid
accesslog log/access.log
errorlog log/debug.log
timeout 600
# debugFalse生产环境不用这个配置项但调试的时候debugTrue还是挺好用的。而且开启debug项后在启动gunicorn的时候可以看到所有可配置项的配置
debugFalse
capture_output True注意上面log项如果需要将这些log文件统一放到log文件夹下事先要先建好不然运行时会报错。
运行代码为
gunicorn --config gunicorn.conf main:app