Package: linker-atom
项目开发文档项目目录结构├── api
│   ├── app.py                    FastApi实例(get_app)
│   ├── base.py                   封装FastApi类(UdfAPIRoute)
│   ├── dependencies.py           接口依赖注入
│   ├── route.py                  路由汇总
│   ├── interface                 接口路由目录
│   │   ├── healthcheck.py
│   ├── middleware                服务启动中间件
│   │   ├── event.py              事件中间件
│   │   ├── http.py               接口中间件
│   └── schema                    接口请求及返回数据模型
│       ├── payload.py
│       └── response.py
├── config                        
│   ├── __init__.py               配置文件
│   ├── logger.py                 日志配置
│   ├── serving.py                serving所需信息配置
│   └── skywalking.py             skywalking配置
├── dependency                    加密方法
│   └── model_protector.so        模型解密
├── lib                           公共方法封装目录
│   ├── common.py                 常用方法
│   ├── exception.py              异常类型
│   ├── load_image.py             加载图片
│   ├── log.py                    日志封装
│   ├── requests.py               requests请求参数/响应日志打印
│   └── share_memory.py           共享内存
├── README.md项目介绍项目基于fastapi进行二次封装, 加入特定的事件、路由封装、参数打印、接口耗时统计、异常捕获等linker_atom.api.interface.healthcheck: 内置健康检查接口, 路由:$ATOM_API_PREFIX/v1/health/pinglinker_atom.api.middleware.event: 注册事件类型, 传递内部配置、按需启动skywalking、按需启动后台线程apscheduler、进行向Serving服务注册及定时发送心跳linker_atom.api.middleware.http: 注册接口中间件, 进行全局异常捕获,返回标准结构数据linker_atom.api.app: 获取fastapi app实例, get_applinker_atom.api.base: 获取fastapi APIRoute实例, UdfAPIRoute通用方法封装linker_atom.lib.common: 异常方法捕获装饰器、长字符截断、限定内存类linker_atom.lib.exception: 通用异常返回linker_atom.lib.load_image: 根据src_type类型加载数据成numpy格式linker_atom.lib.log: logging持久化封装、支持skywalking、日志格式化linker_atom.lib.requests: requests封装、参数、返回数据、耗时日志打印linker_atom.lib.share_memory: 共享内存类封装加密方法目录from linker_atom.dependency.model_protector import ModelProtector: 模型解密类使用介绍环境安装pypi安装pipinstall--no-cache-dir-Ulinker_atom-ihttps://pypi.org/simplewheel安装pipinstalllinker_atom-0.1.0-py3-none-any.whl--force-reinstall注意事项环境变量META中servingHost传值时, 会向serving进行服务注册和心跳服务注册: 服务启动后会由后台线程通过环境变量加载META信息, 并向serving地址发送注册请求,如果未注册成功,会一直进行注册,直至注册成功注册心跳: 服务注册成功后,会定时发送atom心跳, 即定时请求serving使用示例创建server.pyimportosimportuvicornfromuvicorn.loops.autoimportauto_loop_setupos.environ.setdefault('ATOM_API_PREFIX','/d2atom')# META = {#     "abilityCode": "OD210_101_001866_020",#     "abilityCodeInstance": "OD210_101_001866_020cuy4v0htvv7",#     "abilityDependAtomCodes": [#         "a009_msrcnn_trtv115_encrypted_d2atom_v1_serving_inf_predict_v2Om_O_V2_XXS_1"#     ],#     "atomCode": "a009_msrcnn_trtv115_encrypted_d2atom_v1_serving_inf_predict_v2Om_O_V2_XXS_1",#     "atomProcessUrl": "/d2atom/v1/serving/inf_predict_v2",#     "k8sHealthcheckUrl": "/d2atom/v1/health/ping",#     "modelIds": "linker_z2cLOu3962_best_AP_omdet_bs4_A2_fp16",#     "servingHost": "172.16.36.3",#     "servingPort": "0",#     "svcAddress": "http://omai-a009-msrcnn-trt-20231113174051749-c-s.ai:8000"# }# os.environ.setdefault('META', json.dumps(META))# Fastapi 实例fromlinker_atom.api.appimportget_app# APIRoute 实例fromlinker_atom.api.baseimportUdfAPIRoute# 内置配置类实例fromlinker_atom.configimportsettingsapp=get_app()@app.on_event("startup")asyncdefstartup_event():# 算法实现,在服务启动前加载解密模型formodel_idinsettings.model_id_list:pass# 实例化路由route=UdfAPIRoute()# 编写接口@route.post('/detect',name='detect')asyncdefdetect():return{'code':200}# 添加路由app.include_router(router=route,prefix=settings.atom_api_prefix,)# 运行服务defrun():auto_loop_setup(True)uvicorn.run(app='server:app',host='0.0.0.0',port=settings.atom_port,workers=settings.atom_workers,access_log=False)if__name__=='__main__':run()项目内置环境变量变量名称描述默认值ATOM_PORT端口8000ATOM_WORKERSworker数量1ATOM_API_PREFIXAPI前缀''ATOM_TITLE标题''ATOM_DESC描述''LOG_BACKUP_COUNT日志保留数量30LOG_DIR日志子目录atomLOG_FILE_MAX_BYTES单个日志文件最大字节数104857600(100M)SW_SWITCHskywalking是否开启FalseSW_AGENT_COLLECTOR_BACKEND_SERVICESskywalking地址''SW_AGENT_NAMEskywalking服务名''SW_AGENT_INSTANCE_NAMEskywalking实例名称uuidSW_AGENT_LOG_REPORTER_ACTIVEskywalking是否记录日志TrueSW_AGENT_LOG_REPORTER_LEVELskywalking日志等级DEBUGMETAServing传递信息json''