介绍

  1. uvicorn is ASGI服务器
  2. Uvicorn 目前支持 HTTP/1.1 和 WebSockets。计划支持 HTTP/2
  3. 官方文档:http://www.uvicorn.org/

安装&命令行选项

  1. 安装

    1. pip install uvicorn
  2. 命令行选项 | 可选项 | 类型 | 说明 | | —- | —- | —- | | 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 | 环境配置文件 |

启动方式

  1. 命令行运行

    1. uvicorn example:app --reload --port 5000
  2. 以编程方式运行 ```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 )

  1. 3. 使用进程管理器
  2. 1. 结合gunicorn
  3. ```python
  4. # 以4个工作进程启动
  5. gunicorn -w 4 -k uvicorn.workers.UvicornWorker
  6. # >/dev/null 将信息输出到/dev/null
  7. # 2>&1 将错误信息重定向到标准输出
  8. import uvicorn
  9. nohup gunicorn main:app --workers 8 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8086 >/dev/null 2>&1 &
  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

  1. <a name="c3Mbm"></a>
  2. ### 自定义uvicorn配置文件
  3. ```json
  4. {
  5. "version": 1,
  6. "disable_existing_loggers": false,
  7. "formatters": {
  8. "default": {
  9. "()": "uvicorn.logging.DefaultFormatter",
  10. "fmt": "%(levelprefix)s %(message)s",
  11. "use_colors": true
  12. },
  13. "access": {
  14. "()": "uvicorn.logging.AccessFormatter",
  15. "fmt": "%(asctime)s - %(levelprefix)s %(client_addr)s - \"%(request_line)s\" %(status_code)s"
  16. }
  17. },
  18. "handlers": {
  19. "default": {
  20. "formatter": "default",
  21. "class": "logging.StreamHandler",
  22. "stream": "ext://sys.stderr"
  23. },
  24. "access": {
  25. "formatter": "access",
  26. "class": "logging.StreamHandler",
  27. "stream": "ext://sys.stdout"
  28. }
  29. },
  30. "loggers": {
  31. "uvicorn": {
  32. "handlers": [
  33. "default"
  34. ],
  35. "level": "INFO"
  36. },
  37. "uvicorn.error": {
  38. "level": "INFO"
  39. },
  40. "uvicorn.access": {
  41. "handlers": [
  42. "access"
  43. ],
  44. "level": "INFO",
  45. "propagate": false
  46. }
  47. }
  48. }