save code
This commit is contained in:
@@ -33,7 +33,10 @@ SAMPLE_IMAGE_URL = f"{BASE_URL}/static/sample.jpg"
|
||||
# 分辨率门槛(短边/长边,方向无关),可由环境变量覆盖(技术方案 §8.3)
|
||||
MIN_SHORT_SIDE = int(os.getenv("MIN_SHORT_SIDE", "600"))
|
||||
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)
|
||||
_STATE = {"ready": False}
|
||||
|
||||
+42
-19
@@ -1,31 +1,54 @@
|
||||
#!/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(改代码自动重启)
|
||||
# ./run_worker.sh --prod # 部署模式:0.0.0.0:8187,无 reload
|
||||
# HOST=0.0.0.0 PORT=9000 ./run_worker.sh # 用环境变量覆盖 host/port
|
||||
# 可用环境变量覆盖:
|
||||
# HOST=127.0.0.1 PORT=9000 ./run_worker.sh
|
||||
# FOREGROUND=1 ./run_worker.sh # 前台运行(调试用,Ctrl+C 退出)
|
||||
#
|
||||
# 鉴权密码读 worker_config.json 的 accept_passwords(本地默认 testpass),
|
||||
# 鉴权密码读 worker_config.json 的 accept_passwords,
|
||||
# 也可用 WORKER_ACCEPT_PASSWORDS=逗号分隔 覆盖。
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
VENV_PY="./venv/bin/uvicorn"
|
||||
if [ ! -x "$VENV_PY" ]; then
|
||||
echo "找不到 $VENV_PY,请先创建 venv 并安装依赖(见 README/requirements.txt)" >&2
|
||||
VENV_UVICORN="./venv/bin/uvicorn"
|
||||
PID_FILE="worker.pid"
|
||||
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
|
||||
fi
|
||||
|
||||
MODE="${1:-dev}"
|
||||
if [ "$MODE" = "--prod" ]; then
|
||||
HOST="${HOST:-0.0.0.0}"
|
||||
PORT="${PORT:-8187}"
|
||||
echo ">> 部署模式 worker: ${HOST}:${PORT}"
|
||||
exec "$VENV_PY" app:app --host "$HOST" --port "$PORT"
|
||||
# 已在运行则不重复启动
|
||||
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
|
||||
echo "worker 已在运行 (PID $(cat "$PID_FILE")),端口 ${PORT}。如需重启请先 ./stop_worker.sh" >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
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
|
||||
HOST="${HOST:-127.0.0.1}"
|
||||
PORT="${PORT:-8187}"
|
||||
echo ">> 开发模式 worker: ${HOST}:${PORT} (--reload)"
|
||||
exec "$VENV_PY" app:app --host "$HOST" --port "$PORT" --reload
|
||||
echo ">> 启动失败,请查看 $LOG_FILE" >&2
|
||||
rm -f "$PID_FILE"
|
||||
exit 1
|
||||
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