🐍 一个快速高性能的「Python API 模板」
.
├── README.md # 简介
├── server # 部署
│ └── app.py
├── conf # 配置
│ ├── default.prod.yml
│ ├── default.test.yml
│ └── default.yml
├── util # 辅助
│ ├── arg.py
│ ├── conf.py
│ ├── log.py
│ ├── data_model.py
│ └── db.py
├── test # 测试(可选)
│ └── api_test.py
├── doc # 文档(可选)
├── log # 日志
├── Dockerfile # Docker 打包配置(可选)
├── .dockerignore # Docker 忽略配置(可选)
├── .gitignore # Git 忽略配置
├── requirements.txt # 依赖(可选)
└── LICENSE # 许可
一个详尽的文档比什么都重要! 任何人都可以通过文档快速上手。也许你会说,我的代码就我自己看,不写文档也知道。可是你能保证三个月以后,你还记得你当初写的什么吗?!
一个好的深度学习项目文档应该是怎样的?
- 环境依赖说明
- 快速运行脚本
- 类似项目比较
- 性能测试结果
- 细致版本记录
- 相关参考资料
参考:
一些常见的辅助函数,比如:
- conf 配置
- arg 参数
- data_model 数据模型
- log 日志
- db 数据库
所有的配置都是用 YAML,它比 json 更好用,可以在配置中添加注释,并且呈现方式也更为直观!
配置文件的中间名称是「环境变量」,比如 ENV 为 test 时,就会读取 default.test.yml 文件(ENV 默认为 dev,会读取 default.yml)。
如何使用环境变量 ENV 呢?只需要在执行时,把 -e test 添加到命令的后面。
python -m server.main -e test
# or
python -m server.main --env test使用 Web 服务部署到线上环境,推荐使用 Sanic。
python -m server.mainapi_test.py 是对 API 接口进行压力测试,得到 QPS(每秒请求数)。
Locust 是一个非常好用的测试工具,它附带一个 WEB 界面,非常方便地在浏览器中进行压测。
locust -f test/api_test.py -u 10 -r 1在浏览器中打开 http://127.0.0.1:8089,点击 Start swarming 按钮,就可以开始压测了!
参考:
如果项目比较复杂,可以将文档整理归纳到这里。
util/log.py 会将日志按天记录到这里。
项目所需要的依赖,方便一键安装。
pip install -r requirements.txt -i https://pypi.douban.com/simple参考:
如果是开源项目,需要添加许可证。
参考:
- Ubuntu 18.04 LTS+
- Python 3.7+
- Anaconda 3
人生苦短,快用
*NIX!
cd python-api-template
# 打包
docker build -t python-api:0.1.0 .
# 运行
docker run -d --name python-api -p 9999:9999 \
-v $PWD/conf/default.test.yaml:/app/conf/default.yaml \
python-api:0.1.0
# 查看
docker logs -f python-api
# 调用 API
curl --location --request POST 'http://127.0.0.1:9999/test' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "test"
}'