介绍
- uvicorn is ASGI服务器
- Uvicorn 目前支持 HTTP/1.1 和 WebSockets。计划支持 HTTP/2
- 官方文档:http://www.uvicorn.org/
安装&命令行选项
安装
pip install uvicorn
命令行选项 | 可选项 | 类型 | 说明 | | —- | —- | —- | | app | | 指定应用app,”脚本名:FastAPI实例对象”、FastAPI实例对象 | | —host | Str | 可访问域名 | | —port | Int | 可访问端口 | | —reload | [True|False] | 当代码发生更时,是否自动重启,默认False | | —log-config | Path | 支持的格式:.ini、.json、.yaml,默认为fastapi默认的log配置 | | —log-level | [critical|error|warning|info|debug|trace] | 日志等级 | | —use-colors | [True|False] | 彩色日志的开关,(前提需指定log-config),默认为None | | —access-log | [True|False] | access log日志的开关,默认为True | | —env-file | Path | 环境配置文件 |
启动方式
命令行运行
uvicorn example:app --reload --port 5000
以编程方式运行 ```json import uvicorn
…
if name == “main“: uvicorn.run( app=”test:app”, host=”127.0.0.1”, port=8080, reload=True, debug=True, log_level=”debug”, access_log=True, log_config=”uvicorn_config.json”, use_colors=True )
3. 使用进程管理器
1. 结合gunicorn
```python
# 以4个工作进程启动
gunicorn -w 4 -k uvicorn.workers.UvicornWorker
# >/dev/null 将信息输出到/dev/null
# 2>&1 将错误信息重定向到标准输出
import uvicorn
nohup gunicorn main:app --workers 8 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8086 >/dev/null 2>&1 &
- 结合supervisor
```
[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=1024MB
logfile_backups=3
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=false
minfds=1024
minprocs=200
[rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[inet_http_server]
port=*:8687
username=work
password=work
[supervisorctl]
serverurl=http://localhost:8687
username=work
password=work
prompt=mysupervisor
[program:so_fastapi_spuersivor]
command=gunicorn main:app —workers 8 —worker-class uvicorn.workers.UvicornWorker —bind 0.0.0.0:8086 >/dev/null 2>&1
command=gunicorn main:app —workers 8 —worker-class uvicorn.workers.UvicornWorker —bind 0.0.0.0:8086 startsecs=3 killasgroup=true stopasgroup=true user=work redirect_stderr=true # 设置将错误日志重定向(可让strout可正常输出) stdout_logfile=/home/users/work/baidu/personal-code/so_fastapi/so_fastapi/log/spuersivor_log stdout_logfile_maxbytes=10MB stdout_logfile_backups=10 stderr_logfile=/home/users/work/baidu/personal-code/so_fastapi/so_fastapi/log/spuersivor_log.err stderr_logfile_maxbytes=10MB stderr_logfile_backups=10
启动
supervisord -c /home/users/work/baidu/personal-code/so_fastapi/so_fastapi/supervisord.conf
<a name="c3Mbm"></a>
### 自定义uvicorn配置文件
```json
{
"version": 1,
"disable_existing_loggers": false,
"formatters": {
"default": {
"()": "uvicorn.logging.DefaultFormatter",
"fmt": "%(levelprefix)s %(message)s",
"use_colors": true
},
"access": {
"()": "uvicorn.logging.AccessFormatter",
"fmt": "%(asctime)s - %(levelprefix)s %(client_addr)s - \"%(request_line)s\" %(status_code)s"
}
},
"handlers": {
"default": {
"formatter": "default",
"class": "logging.StreamHandler",
"stream": "ext://sys.stderr"
},
"access": {
"formatter": "access",
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout"
}
},
"loggers": {
"uvicorn": {
"handlers": [
"default"
],
"level": "INFO"
},
"uvicorn.error": {
"level": "INFO"
},
"uvicorn.access": {
"handlers": [
"access"
],
"level": "INFO",
"propagate": false
}
}
}