• fastapi项目结构以及多进程部署


    环境: python3.10.x Linux/centos
    背景: 最近在用FastApi开发数据统计,并将统计数据返回给前端展示的数据系统。
    数据库: mongodb, python包为mongoEngine

    项目结构

    main.py
    api
    middleware
    router
      -- __init__.py
      -- route.py
    service
    model
    config
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    说明:
    api: 接口的参数
    model: 为数据库表映射对象
    middleware: 中间件
    router: 路由配置
    service: 服务内容
    config: 数据库等基础配置

    其中 main.py 代码:

    from fastapi import FastAPI, APIRouter
    import uvicorn
    
    import multiprocessing
    cpus = multiprocessing.cpu_count()
    
    from router import route
    app = FastAPI()
    
    app.include_router(route.routers)
    
    #uvicorn.run(app, host="0.0.0.0", port=8010) # 可用于开发时部署
    if __name__ == "__main__":
        uvicorn.run(app="main:app", host="0.0.0.0", port=8010, workers= min(cpus,2))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    route.py 代码:

    
    from fastapi import FastAPI, APIRouter
    from api import filter
    from model import  response_model
    
    routers = APIRouter(prefix="/v1")
    
    routers.add_api_route(path="/filter", endpoint=filter.filter_api, methods=["POST"],
            response_model=response_model.FilterResponseModel ,tags=["Home-filter"])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    部署

    在实际部署中,如以上main.py中所示, 采用 uvicorn.run, 并设置worker大于1,配置为多个进程运行。

    备注:

    1、关闭父进程以及相关子进程的方法:

    kill -TERM    ppid
    
    • 1

    ppid: 父进程的进程id

    2、杀死批量进程

    kill -9 $(ps -ef | pgrep chrome)
    
    • 1

    3、修改机器hostname

    hostnamectl set-hostname aliyun-1
    
    • 1

    aliyun-1: 新的hostname
    以上修改不用重启机器, 修改立即生效

    4、获取当前文件所在的目录

    dirname $0:获取当前脚本所在的绝对目录
    cd $(dirname $0):进入这个目录
    pwd:显示切换后脚本所在工作目录
    结合起来,在脚本中使用下面的语句,就可以得到脚本的绝对路径。
    
    cwd=$(cd $(dirname $0);pwd)
    cd $cwd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    ctf-pikachu-CSRF
    基于Ubuntu部署前端项目
    Linux x86_64 backtrace 栈回溯
    表单 v-decorator 相关用法
    [附源码]SSM计算机毕业设计基于实时定位的超市配送业务管理JAVA
    关于城市综合管廊分析与应用
    Cenots7 离线安装部署PostgreSQL
    ctf.show刷题记录_web(1-10)
    矩阵点乘multiply()函数和矩阵乘法dot()函数
    DOM知识点总结
  • 原文地址:https://blog.csdn.net/a1368783069/article/details/133922804