save code
This commit is contained in:
@@ -33,7 +33,10 @@ SAMPLE_IMAGE_URL = f"{BASE_URL}/static/sample.jpg"
|
|||||||
# 分辨率门槛(短边/长边,方向无关),可由环境变量覆盖(技术方案 §8.3)
|
# 分辨率门槛(短边/长边,方向无关),可由环境变量覆盖(技术方案 §8.3)
|
||||||
MIN_SHORT_SIDE = int(os.getenv("MIN_SHORT_SIDE", "600"))
|
MIN_SHORT_SIDE = int(os.getenv("MIN_SHORT_SIDE", "600"))
|
||||||
MIN_LONG_SIDE = int(os.getenv("MIN_LONG_SIDE", "800"))
|
MIN_LONG_SIDE = int(os.getenv("MIN_LONG_SIDE", "800"))
|
||||||
MAX_FILE_BYTES = 1_000_000 # 1 MB
|
# 文件大小上限(字节),可由环境变量覆盖;设为 0 表示不限制
|
||||||
|
MAX_FILE_BYTES = int(os.getenv("MAX_FILE_BYTES", "1000000")) # 默认 1 MB
|
||||||
|
if MAX_FILE_BYTES <= 0:
|
||||||
|
MAX_FILE_BYTES = float("inf")
|
||||||
|
|
||||||
# 运行期状态:模型就绪标志(/health 据此返回 200/503)
|
# 运行期状态:模型就绪标志(/health 据此返回 200/503)
|
||||||
_STATE = {"ready": False}
|
_STATE = {"ready": False}
|
||||||
|
|||||||
+42
-19
@@ -1,31 +1,54 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# worker 开发启动脚本(接口1 四庭七眼测量)。
|
# 启动 GPU worker(接口1 四庭七眼 / 接口2 发际线等)。
|
||||||
|
# 默认:后台运行,绑定 0.0.0.0:8187,日志写到 worker.log,PID 写到 worker.pid。
|
||||||
|
# 每次开机手动执行一次即可。停止用 ./stop_worker.sh。
|
||||||
#
|
#
|
||||||
# 用法:
|
# 可用环境变量覆盖:
|
||||||
# ./run_worker.sh # 开发模式:127.0.0.1:8187 + --reload(改代码自动重启)
|
# HOST=127.0.0.1 PORT=9000 ./run_worker.sh
|
||||||
# ./run_worker.sh --prod # 部署模式:0.0.0.0:8187,无 reload
|
# FOREGROUND=1 ./run_worker.sh # 前台运行(调试用,Ctrl+C 退出)
|
||||||
# HOST=0.0.0.0 PORT=9000 ./run_worker.sh # 用环境变量覆盖 host/port
|
|
||||||
#
|
#
|
||||||
# 鉴权密码读 worker_config.json 的 accept_passwords(本地默认 testpass),
|
# 鉴权密码读 worker_config.json 的 accept_passwords,
|
||||||
# 也可用 WORKER_ACCEPT_PASSWORDS=逗号分隔 覆盖。
|
# 也可用 WORKER_ACCEPT_PASSWORDS=逗号分隔 覆盖。
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
VENV_PY="./venv/bin/uvicorn"
|
VENV_UVICORN="./venv/bin/uvicorn"
|
||||||
if [ ! -x "$VENV_PY" ]; then
|
PID_FILE="worker.pid"
|
||||||
echo "找不到 $VENV_PY,请先创建 venv 并安装依赖(见 README/requirements.txt)" >&2
|
LOG_FILE="worker.log"
|
||||||
|
HOST="${HOST:-0.0.0.0}"
|
||||||
|
PORT="${PORT:-8187}"
|
||||||
|
|
||||||
|
# ---- 临时取消上传图片限制(分辨率 + 文件大小)----
|
||||||
|
# 0 = 不限制。要恢复默认(600/800/1MB),删掉下面三行即可。
|
||||||
|
export MIN_SHORT_SIDE="${MIN_SHORT_SIDE:-0}"
|
||||||
|
export MIN_LONG_SIDE="${MIN_LONG_SIDE:-0}"
|
||||||
|
export MAX_FILE_BYTES="${MAX_FILE_BYTES:-0}"
|
||||||
|
# ------------------------------------------------
|
||||||
|
|
||||||
|
if [ ! -x "$VENV_UVICORN" ]; then
|
||||||
|
echo "找不到 $VENV_UVICORN,请先创建 venv 并安装依赖(见 requirements.txt)" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MODE="${1:-dev}"
|
# 已在运行则不重复启动
|
||||||
if [ "$MODE" = "--prod" ]; then
|
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
||||||
HOST="${HOST:-0.0.0.0}"
|
echo "worker 已在运行 (PID $(cat "$PID_FILE")),端口 ${PORT}。如需重启请先 ./stop_worker.sh" >&2
|
||||||
PORT="${PORT:-8187}"
|
exit 0
|
||||||
echo ">> 部署模式 worker: ${HOST}:${PORT}"
|
fi
|
||||||
exec "$VENV_PY" app:app --host "$HOST" --port "$PORT"
|
|
||||||
|
if [ "${FOREGROUND:-0}" = "1" ]; then
|
||||||
|
echo ">> 前台运行 worker: ${HOST}:${PORT}"
|
||||||
|
exec "$VENV_UVICORN" app:app --host "$HOST" --port "$PORT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ">> 后台启动 worker: ${HOST}:${PORT}"
|
||||||
|
nohup "$VENV_UVICORN" app:app --host "$HOST" --port "$PORT" >> "$LOG_FILE" 2>&1 &
|
||||||
|
echo $! > "$PID_FILE"
|
||||||
|
sleep 1
|
||||||
|
if kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
||||||
|
echo ">> 已启动,PID $(cat "$PID_FILE"),日志:$LOG_FILE"
|
||||||
else
|
else
|
||||||
HOST="${HOST:-127.0.0.1}"
|
echo ">> 启动失败,请查看 $LOG_FILE" >&2
|
||||||
PORT="${PORT:-8187}"
|
rm -f "$PID_FILE"
|
||||||
echo ">> 开发模式 worker: ${HOST}:${PORT} (--reload)"
|
exit 1
|
||||||
exec "$VENV_PY" app:app --host "$HOST" --port "$PORT" --reload
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
Executable
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# 停止 GPU worker(由 run_worker.sh 后台启动的进程)。
|
||||||
|
# 优先用 worker.pid;找不到则按端口兜底查找。
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
PID_FILE="worker.pid"
|
||||||
|
PORT="${PORT:-8187}"
|
||||||
|
|
||||||
|
stop_pid() {
|
||||||
|
local pid="$1"
|
||||||
|
if kill -0 "$pid" 2>/dev/null; then
|
||||||
|
echo ">> 停止 worker (PID $pid)"
|
||||||
|
kill "$pid"
|
||||||
|
# 等待优雅退出,最多 10 秒
|
||||||
|
for _ in $(seq 1 10); do
|
||||||
|
kill -0 "$pid" 2>/dev/null || return 0
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
echo ">> 未在 10 秒内退出,强制 kill -9"
|
||||||
|
kill -9 "$pid" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1) 用 PID 文件
|
||||||
|
if [ -f "$PID_FILE" ]; then
|
||||||
|
PID="$(cat "$PID_FILE")"
|
||||||
|
if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
|
||||||
|
stop_pid "$PID"
|
||||||
|
rm -f "$PID_FILE"
|
||||||
|
echo ">> 已停止"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
rm -f "$PID_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2) 兜底:按监听端口查找
|
||||||
|
PIDS="$(ss -tlnp 2>/dev/null | grep ":${PORT} " | grep -oE 'pid=[0-9]+' | grep -oE '[0-9]+' | sort -u || true)"
|
||||||
|
if [ -n "$PIDS" ]; then
|
||||||
|
for p in $PIDS; do stop_pid "$p"; done
|
||||||
|
echo ">> 已停止(按端口 ${PORT} 查找)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ">> 没有发现正在运行的 worker(端口 ${PORT})"
|
||||||
Reference in New Issue
Block a user