WSGI协议
Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。
WSGI容器——Gunicorn
常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多,所以这里我也选择用Gunicorn作为容器。
安装
pip install gunicorn
启动
- 基本demo
$ gunicorn [options] module_name:variable_name
module_name对应python文件,variable_name对应web应用实例。
以最简单的flask应用为例:
#main.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
if __name__ == '__main__':
app.run()
启动代码
gunicorn --worker=3 main:app -b 0.0.0.0:8080
- Dock框架应用
# -*- coding: utf-8 -*-
from dock.web import DockApp
import dock_hello
app = DockApp("") # 初始化DockApp,对Flask App的封装
# app.flaskapp
# 当创建DockApp或者DockEnv时,会自动在程序运行的当前目录自动加载config.yaml文件,
# 如果没有config.yaml,其会尝试读取config.template.yaml文件,并将其拷贝,重命名为config.yaml
# 加载Dock积木
app.mount(dock_hello)
# Dock积木是一个python module
# 其必须要包含一个init函数,接收app作为参数,需要返回多个Flask 蓝图对象
# dock_hello 就是一个python module,import dock_hello __init__.py文件中定义了init方法
# 开发时推荐采用dock-server 来运行
启动代码
gunicorn dock_hello.server:app -b 0.0.0.0:8000
or
gunicorn -w 3 dock_hello.server:app -b 0.0.0.0:8000
- 其他demo
# wsgi.py
from flask import Flask
def create_app():
# 这个工厂方法可以从你的原有的 `__init__.py` 或者其它地方引入。
app = Flask(__name__)
return app
application = create_app()
if __name__ == '__main__':
application.run()
启动代码
$ gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application