fix(portfolio): worker _TIMEOUT 3600→10800(3h)+timeout非静默日志
全市场(max_pool=0)全周期(726天)回测每策略 60-100min,原 3600s(1h)不够→ subprocess.run kill→_wait_future 静默 task.fail→404。改 10800(3h)覆盖。 加 try/except TimeoutExpired 显式 logger.error(task_id+argv)+raise RuntimeError, timeout 不再静默(治基建反馈排查困难)
This commit is contained in:
@@ -21,7 +21,7 @@ logger = logging.getLogger(__name__)
|
|||||||
_VPS_HOST = "49.232.102.198"
|
_VPS_HOST = "49.232.102.198"
|
||||||
_VPS_WORKDIR = r"C:\\sanguo_vnpy_v2"
|
_VPS_WORKDIR = r"C:\\sanguo_vnpy_v2"
|
||||||
_VPS_PYTHON = "python"
|
_VPS_PYTHON = "python"
|
||||||
_TIMEOUT = 3600 # 1 hour hard cap (was 600s sync in routes_portfolio)
|
_TIMEOUT = 10800 # 3h hard cap (was 3600/1h; 全市场全周期 60-100min/策略不够)
|
||||||
|
|
||||||
|
|
||||||
def run_portfolio_task(spec: dict) -> Any:
|
def run_portfolio_task(spec: dict) -> Any:
|
||||||
@@ -56,10 +56,21 @@ def run_portfolio_task(spec: dict) -> Any:
|
|||||||
argv, cwd = _build_argv(start, end, cash, benchmark, max_pool, provider_config, strategy)
|
argv, cwd = _build_argv(start, end, cash, benchmark, max_pool, provider_config, strategy)
|
||||||
logger.info("[portfolio_worker] task=%s running: %s", task_id, " ".join(argv[3:]))
|
logger.info("[portfolio_worker] task=%s running: %s", task_id, " ".join(argv[3:]))
|
||||||
|
|
||||||
proc = subprocess.run(
|
try:
|
||||||
argv, cwd=cwd, capture_output=True, text=True,
|
proc = subprocess.run(
|
||||||
timeout=_TIMEOUT, check=False,
|
argv, cwd=cwd, capture_output=True, text=True,
|
||||||
)
|
timeout=_TIMEOUT, check=False,
|
||||||
|
)
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
# 全市场全周期慢→3h仍超→显式log(否则_wait_future静默task.fail难排查)
|
||||||
|
logger.error(
|
||||||
|
"[portfolio_worker] task=%s TIMEOUT after %ss (argv tail=%s)",
|
||||||
|
task_id, _TIMEOUT, " ".join(argv[3:]),
|
||||||
|
)
|
||||||
|
raise RuntimeError(
|
||||||
|
f"runner_backtest timeout after {_TIMEOUT}s "
|
||||||
|
f"(全市场全周期?考虑缩小 universe 或周期)"
|
||||||
|
)
|
||||||
|
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
stderr_tail = (proc.stderr or "")[-2000:]
|
stderr_tail = (proc.stderr or "")[-2000:]
|
||||||
|
|||||||
Reference in New Issue
Block a user