From 6d786fbf41fdc26aed0d4a1bb6509d82e2a39de0 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Sat, 1 Aug 2026 21:33:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(orchestrator):=20spawn=20=E5=AD=90=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=20PYTHONPATH=20+=20entrypoint=20=E5=9B=9E=E6=A0=B9?= =?UTF-8?q?=E6=B2=BB=E5=AD=A4=E5=84=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ProcessPoolExecutor(spawn)子进程不继承主进程 sys.path(insert 是内存修改), import sanguo_orchestrator 失败->BrokenProcessPool->API 回测静默失败,POST 秒回 task_id 但轮询永远 404。spawn 继承 env 不继承 sys.path,故: 1. Dockerfile ENV PYTHONPATH=/app:/app/vnpy_v4.4.0(镜像层,bind mount 覆盖不了) 2. entrypoint.sh 回仓库根(git mv 自 docker/):promote --exclude /docker 致旧版 entrypoint 在 NAS 成 git 外孤儿(340行,被 bind mount 覆盖镜像层);回根后全量 rsync 自动推可复现(对齐 docs/deployment/nas-deploy-plan.md 预设修复)+export 兜底 3. 三 Dockerfile COPY 路径同步 反馈: 策略 session(根因诊断+探针验证) --- docker/Dockerfile | 3 ++- docker/Dockerfile.local | 2 +- docker/Dockerfile.nas | 2 +- docker/entrypoint.sh => entrypoint.sh | 5 +++++ 4 files changed, 9 insertions(+), 3 deletions(-) rename docker/entrypoint.sh => entrypoint.sh (96%) diff --git a/docker/Dockerfile b/docker/Dockerfile index ba7c789..f747bcc 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -9,6 +9,7 @@ ENV TZ=Asia/Shanghai \ DEBIAN_FRONTEND=noninteractive \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ + PYTHONPATH=/app:/app/vnpy_v4.4.0 \ VNPY_LOG_LEVEL=INFO \ TA_LIBRARY_PATH=/usr/local/lib \ TA_INCLUDE_PATH=/usr/local/include @@ -60,7 +61,7 @@ COPY sanguo_data/ /app/sanguo_data/ COPY sanguo_common/ /app/sanguo_common/ # 复制启动脚本 -COPY docker/entrypoint.sh /app/ +COPY entrypoint.sh /app/ RUN chmod +x /app/entrypoint.sh # 暴露端口 diff --git a/docker/Dockerfile.local b/docker/Dockerfile.local index 06230b2..6b97076 100644 --- a/docker/Dockerfile.local +++ b/docker/Dockerfile.local @@ -33,7 +33,7 @@ COPY vnpy_v4.4.0/vnpy/ /app/vnpy/ COPY run_web.py /app/ # 复制启动脚本 -COPY docker/entrypoint.sh /app/ +COPY entrypoint.sh /app/ RUN chmod +x /app/entrypoint.sh # 暴露端口 diff --git a/docker/Dockerfile.nas b/docker/Dockerfile.nas index aff6520..52115ff 100644 --- a/docker/Dockerfile.nas +++ b/docker/Dockerfile.nas @@ -18,7 +18,7 @@ COPY vnpy_v4.4.0/vnpy/ ./vnpy/ COPY config/ ./config/ # 复制启动脚本 -COPY docker/entrypoint.sh . +COPY entrypoint.sh . RUN chmod +x entrypoint.sh # 创建数据目录 diff --git a/docker/entrypoint.sh b/entrypoint.sh similarity index 96% rename from docker/entrypoint.sh rename to entrypoint.sh index c253759..3497fb1 100644 --- a/docker/entrypoint.sh +++ b/entrypoint.sh @@ -63,6 +63,11 @@ check_env() { export PYTHONUNBUFFERED="${PYTHONUNBUFFERED:-1}" export PYTHONDONTWRITEBYTECODE="${PYTHONDONTWRITEBYTECODE:-1}" + # Python 路径(关键): ProcessPoolExecutor(spawn)子进程不继承主进程 sys.path(内存修改), + # 但继承环境变量。设 PYTHONPATH 让 spawn 子进程 import sanguo_*/vnpy 不 ModuleNotFoundError→BrokenProcessPool。 + # 镜像 Dockerfile ENV 同设此值(优先),此行为旧镜像/无 ENV 时兜底。 + export PYTHONPATH="${PYTHONPATH:-/app:/app/vnpy_v4.4.0}" + # VeighNa 配置 export VNPY_LOG_LEVEL="${VNPY_LOG_LEVEL:-INFO}" export VNPY_LOG_FILE="${VNPY_LOG_FILE:-/app/logs/vnpy.log}"