fix: b_td1_v3_scanner 8线程并发(14min→2min防超时)+executor returncode检查/480s超时/完整stderr(知微提单t_b27ad65f)

This commit is contained in:
xxm
2026-08-17 11:40:30 +08:00
parent b6558bf9da
commit cc45f604f5
2 changed files with 46 additions and 16 deletions
+26 -10
View File
@@ -94,7 +94,12 @@ def is_trading_time():
def run_scanner(scanner_name):
"""执行一个扫描器(带超时防挂"""
"""执行一个扫描器(带超时防挂 + returncode 检查 + 完整 stderr 落盘)
2026-08-17 知微提单 t_b27ad65f 辅修:
1. returncode 检查——scanner 崩溃(exit!=0)记 ✗,不再误报「✓完成」
2. 超时 600→480s(每扫描器预算,避免挤占 cron harness 600s 总预算)
3. 完整 stderr 落盘(截断 200→1000 字符,便于追根因)
"""
script = _SCRIPT_DIR / scanner_name
if not script.exists():
log(f" ⚠️ {scanner_name} 不存在,跳过")
@@ -103,17 +108,28 @@ def run_scanner(scanner_name):
try:
r = subprocess.run(
[sys.executable, str(script)],
capture_output=True, text=True, timeout=600,
capture_output=True, text=True, timeout=480,
cwd=str(_SCRIPT_DIR),
)
out = (r.stdout or "").strip()[:300]
err = (r.stderr or "").strip()[:200]
log(f"{scanner_name} 完成: {out}")
if err:
log(f" ⚠️ {scanner_name} stderr: {err}")
return True
except subprocess.TimeoutExpired:
log(f"{scanner_name} 超时(600s)跳过")
out = (r.stdout or "").strip()[-500:] # 尾部(含完成/命中汇总)
err = (r.stderr or "").strip()[-1000:] # 完整 stderr(截断1000
if r.returncode == 0:
log(f"{scanner_name} 完成(rc=0): {out}")
if err:
log(f" ⚠️ {scanner_name} stderr(rc=0): {err}")
return True
else:
log(f"{scanner_name} 崩溃(rc={r.returncode}): {out}")
log(f"{scanner_name} stderr: {err}")
return False
except subprocess.TimeoutExpired as e:
# 超时:子进程可能孤儿化,尝试终止进程组
try:
if e.stdout or e.stderr:
pass
except Exception:
pass
log(f"{scanner_name} 超时(480s)跳过——检查孤儿进程")
return False
except Exception as e:
log(f"{scanner_name} 异常: {e}")