tianyunperfect 3 роки тому
батько
коміт
ff8dcf1043

+ 16 - 0
fastapi-demo/README.md

@@ -0,0 +1,16 @@
+## 依赖
+```bash
+python3 -m pip install httptools uvloop gunicorn uvicorn
+```
+## 启动
+```
+# uvicorn 启动
+uvicorn local:app --reload --port 5000
+
+# 多线程启动
+gunicorn api_rec:app -c gunicorn_config.py -D
+```
+## 关闭
+```bash
+kill -9 $(lsof -t -i:5000)
+```

+ 0 - 2
fastapi-demo/config/__init__.py

@@ -4,10 +4,8 @@
 # 简单 Class 类函数的 初始化
 
 import asyncio
-import json
 import logging
 import os
-from concurrent.futures import ThreadPoolExecutor
 from configparser import ConfigParser
 from logging.handlers import TimedRotatingFileHandler
 from os.path import dirname

+ 0 - 16
fastapi-demo/config/supervisor.ini

@@ -1,16 +0,0 @@
-[program:eip_ai_v0.2_async]
-directory=/home/zhuzhiqiang/projects/eip_ai_v0.2_async/eip-ai
-command=/home/hezhiguo/.virtualenvs/eip-ai-async-py387/bin/python3 /home/hezhiguo/.virtualenvs/eip-ai-async-py387/bin/gunicorn api_main_8000:app  -c gunicorn_config.py
-autostart=true
-autorestart=true
-startsecs=5
-loglevel=info
-
-
-user=root
-stdout_logfile=/home/zhuzhiqiang/projects/eip_ai_v0.2_async/logs/supervisor/eip_ai_out.log
-stdout_logfile_maxbytes=1024MB
-stdout_logfile_backups=2
-stderr_logfile=/home/zhuzhiqiang/projects/eip_ai_v0.2_async/logs/supervisor/eip_ai_err.log
-stderr_logfile_maxbytes=1024MB
-stderr_logfile_backups=2

+ 1 - 1
fastapi-demo/controller/base_controller.py

@@ -2,7 +2,7 @@
 from fastapi import APIRouter
 from fastapi.responses import JSONResponse
 
-router = APIRouter(prefix="/base", tags=['base'])
+router = APIRouter(tags=['base'])
 
 
 @router.get("/check", name="服务状态校验")

+ 8 - 50
fastapi-demo/gunicorn_config.py

@@ -1,31 +1,9 @@
 # -*- coding:utf-8 -*-
-"""
-    gunicorn 配置项
-"""
-# Gunicorn的配置可以参考:
 
+# 参考:
 # https://blog.csdn.net/y472360651/article/details/78538188
-
 # https://docs.gunicorn.org/en/stable/settings.html#server-mechanics
-
-"""
-if __name__ == '__main__':
-    uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)
-
-
-requirements:
-    httptooles, uvloop, gunicorn, uvicorn
-
-
-
-shell:
-     uvicorn:
-        uvicorn local:app --reload --port 5000
-
-    gunicorn:
-        gunicorn api_main:app -b 0.0.0.0:8001 -w 4 -k uvicorn.workers.UvicornWorker  # -D 守护启动 -c 配置文件
-"""
-
+import multiprocessing
 import os
 
 from config import CfgBaseInit
@@ -37,8 +15,8 @@ project_name = CfgBaseInit.project_name
 debug = True
 
 # 后台守护模式
-# daemon = True
-daemon = False  # 如果考虑使用 supervisor 的话,将此关闭较为稳妥
+daemon = True
+# daemon = False  # 如果考虑使用 supervisor 的话,将此关闭较为稳妥
 
 # 更改代码后台重新加载
 # reload = True
@@ -58,32 +36,12 @@ worker_connections = 10000
 # 长链接保持时间 1-5s, 默认 2
 keepalive = 180
 
-# workers = multiprocessing.cpu_count() * 2 + 1    # 进程数
-workers = 3  # 进程数
+workers = multiprocessing.cpu_count() * 2 + 1    # 进程数
 threads = min(32, (os.cpu_count() or 1) + 4)  # if "uvicorn" not in worker_class else 1  # 指定每个进程开启的线程数
 loglevel = 'debug'  # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
 access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'  # 设置gunicorn访问日志格式,错误日志无法设置
 
-"""
-其每个选项的含义如下:
-h          remote address
-l          '-'
-u          currently '-', may be user name in future releases
-t          date of the request
-r          status line (e.g. ``GET / HTTP/1.1``)
-s          status
-b          response length or '-'
-f          referer
-a          user agent
-T          request time in seconds
-D          request time in microseconds
-L          request time in decimal seconds
-p          process ID
-"""
-
-# 如果使用service启动,这里的pid路径应与service的pid路径保持一致,否则无法启动
-# pidfile = "./log/fast.pid"
-pidfile = "{}/../logs/{}/pid.pid".format(project_path, project_name)
 
-accesslog = "{}/../logs/{}/gunicorn_access.log".format(project_path, project_name)  # 访问日志文件
-errorlog = "{}/../logs/{}/gunicorn_error.log".format(project_path, project_name)  # 错误日志文件
+pidfile = "{}/logs/pid.pid".format(project_path)
+accesslog = "{}/logs/gunicorn_access.log".format(project_path)  # 访问日志文件
+errorlog = "{}/logs/gunicorn_error.log".format(project_path)  # 错误日志文件

+ 1 - 1
fastapi-demo/main.py

@@ -19,7 +19,7 @@ from config import logger, CfgBaseInit
 
 app = FastAPI(title="project name ", description="通用系统 ", version="v 0.0.0")
 
-app.routes.pop(1)  # drop default docs_url router
+# app.routes.pop(1)  # drop default docs_url router
 
 # 添加 session 中间键,使项目中可以使用session
 app.add_middleware(SessionMiddleware, secret_key='123456hhh')

+ 16 - 4
sh-demo/tmp.sh

@@ -1,4 +1,16 @@
-cat >> ~/.zshrc << \EOF
-echo `hostname`
-echo $HOME
-EOF
+increment_version ()
+{
+  declare -a part=( ${1//\./ } )
+  declare    new
+  declare -i carry=1
+  for (( CNTR=${#part[@]}-1; CNTR>=0; CNTR-=1 )); do
+    len=${#part[CNTR]}
+    new=$((part[CNTR]+carry))
+    [ ${#new} -gt $len ] && carry=1 || carry=0
+    [ $CNTR -gt 0 ] && part[CNTR]=${new: -len} || part[CNTR]=${new}
+  done
+  new="${part[*]}"
+  echo -e "${new// /.}"
+}
+version='1.2.3.9'
+increment_version $version