chore(cta_engine): 加阶段 logging(治 spawn 子进程黑盒,定位卡死)
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 已修非根因)。
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user