介绍
- 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 uvicornnohup 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}}}
