From 3d934f5fa63f51076e40dfce455996d2a6c316c5 Mon Sep 17 00:00:00 2001 From: claude_dev Date: Sun, 2 Aug 2026 21:14:40 +0800 Subject: [PATCH] =?UTF-8?q?chore(cta=5Fengine):=20=E5=8A=A0=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=20logging(=E6=B2=BB=20spawn=20=E5=AD=90=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=E9=BB=91=E7=9B=92,=E5=AE=9A=E4=BD=8D=E5=8D=A1?= =?UTF-8?q?=E6=AD=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CTA 回测走 ProcessPool spawn 子进程,cta_engine 没配 basicConfig → 回测日志不进 docker logs(卡死看不到卡哪行,反复诊断障碍)。加模块级 basicConfig + read_index_daily/compute_metrics 阶段 logging + daily_df shape。下次卡死 docker logs 可见卡段(同 portfolio_worker)。诊断 cta_8aab3823 日线卡(rolling 已修非根因)。 --- sanguo_backtest/cta_engine.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sanguo_backtest/cta_engine.py b/sanguo_backtest/cta_engine.py index c3cf247..a0ff66e 100644 --- a/sanguo_backtest/cta_engine.py +++ b/sanguo_backtest/cta_engine.py @@ -3,6 +3,10 @@ import sys import os import math import logging + +# ProcessPool spawn 子进程不继承主进程 logging 配置 → CTA 回测日志黑盒(看不到卡哪行)。 +# 模块级 basicConfig 让 cta_engine 日志 → stderr → docker logs(同 portfolio_worker)。 +logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s") import traceback import uuid from datetime import datetime @@ -305,7 +309,9 @@ def run_cta_backtest( end_date = end_dt if isinstance(end_dt, datetime) else datetime.strptime(end, "%Y-%m-%d") try: + logging.info("[cta] read_index_daily 开始: %s %s~%s", benchmark_code, start_date.date(), end_date.date()) bench_df = read_index_daily(benchmark_code, start_date, end_date, bench_cfg) + logging.info("[cta] read_index_daily 完成: %d 行", 0 if bench_df is None else len(bench_df)) if bench_df is not None and not bench_df.empty and "close" in bench_df.columns: # Calculate benchmark daily returns bench_df["date"] = pd.to_datetime(bench_df["date"]) @@ -332,7 +338,9 @@ def run_cta_backtest( # 不再依赖 vnpy 的 log return 列(删原三路 fallback) # Compute relative metrics(benchmark 有无都执行;空时基准类指标 NaN→None) + logging.info("[cta] compute_metrics 开始: daily_df shape=%s benchmark=%d", daily_df.shape, len(benchmark_returns)) metrics_result = compute_metrics(daily_df, benchmark_returns) + logging.info("[cta] compute_metrics 完成") # Merge scalars into statistics (for API response) statistics.update(metrics_result.scalars)