安装
安装方式
- 安装最新版本
- pip install gunicorn
- 安装源代码
- pip install git+https://github.com/benoitc/gunicorn.git
- 系统安装
- sudo apt-get install gunicorn
设计 Worker 类型
根据同步、异步设计 Worker。如果需要异步worker,需要安装 Eventlet 或 Gevent。
- gunicorn[eventlet] - Eventlet-based greenlets
- gunicorn[gevent] - Gevent-based greenlets
- gunicorn[gthread] - Threaded
- gunicorn[tornado] - Tornado-based workers, not recommended
运行 Gunicorn
运行方式
- 命令
- gunicorn [OPTIONS] APP_MODULE
- 例如:gunicorn --workers=4 --bind=0.0.0.0:8000 wsgi:app
- 利用类似Django、Pyramid、TurboGears或Flask Web框架
- 略
配置
配置方式
- Web框架的配置文件。她只能影响到指定应用程序
- 命令行中可选指定的配置文件。它能覆盖掉Web框架的配置。
- 命令行中通过参数配置。它是配置最开始被考虑的位置。
配置项
- 使用配置文件
- Debugging
- reload
- reload_engine
- reload_extra_files
- spew
- check_config
- Logging
- access_log_format 访问日志格式
- 格式详解
- access_log_format 访问日志格式
# h 远程地址 127.0.0.1
# l "-"
# u 用户名 -
# D request-time-ms
# p process-id <121005>
# t time [14/May/2020:10:31:25 +0800]
# r 状态行 "POST /v1/devicestatus/update/bytask HTTP/1.1"
# s 状态码 200
# b response-length 35
# f 参考 "-"
# a 用户代理 "python-requests/2.9.1"
- Processing Naming
- SSL
- Security
- Server Hooks
- Server Mechanics
- Server Socket
- Worker Process
Instrumentation
部署
强烈建议在代理服务器后使用Gunicorn。
Nginx 配置
使用虚拟环境
监控
日志
参考概念
进程、线程、协程的区别
Linux中,程序中创建的线程(也称为轻量级进程,LWP)会具有和程序的PID相同的“线程组ID”。
协程又称为微线程。英文名Coroutine,协程是一种用户态的轻量级线程。
-
协程的好处
无需线程上下文切换的开销
无需原子操作(不会被线程调度机制打断的操作)锁定以及同步的开销
方便切换控制流,简化编程模型
高并发+高扩展性+低成文:一个CPU支持上完的协程都不是问题,所以很适合高并发处理 -
协程的缺点
无法利用多核资源:协程的本质是单线程,需要和进程配合才能运行在多CPU上
进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序 -
协程的条件
必须在只有一个单线程里实现并发
修改共享数据不需加锁
用户程序里自己保存多个控制流的上下文栈
一个协程遇到IO操作自动切换到其它协程