fix(figures): PMC 解析冷连接重试——176 实测首次 TLS 握手 10s+ 超时,重连秒回;失败重试一次走热路径

This commit is contained in:
2026-09-12 01:55:42 +08:00
parent 8e4fce062a
commit faa8686461
+12 -1
View File
@@ -160,7 +160,7 @@ def _job_pmcid(job_dir: Path, pmcid_to_paper: dict[str, str]) -> str | None:
# PMC 外网解析
# ---------------------------------------------------------------------------
async def _epmc_figures(client: httpx.AsyncClient, pmcid: str) -> tuple[list[dict], str]:
async def _epmc_figures_once(client: httpx.AsyncClient, pmcid: str) -> tuple[list[dict], str]:
"""返回 (figures, license)。任何失败返回 ([], "")。"""
try:
r = await client.get(EPMC_FULLTEXT.format(pmcid=pmcid), timeout=EXTERNAL_TIMEOUT)
@@ -227,6 +227,17 @@ async def _epmc_figures(client: httpx.AsyncClient, pmcid: str) -> tuple[list[dic
return [], ""
async def _epmc_figures(client: httpx.AsyncClient, pmcid: str) -> tuple[list[dict], str]:
"""PMC 解析重试包装:2026-09-12 部署质检发现 176 出网到 EBI 冷连接
首次 TLS 握手 10s+ 超时、重连即秒回(实测 1.6-2.2s),失败重试一次。"""
for attempt in (1, 2):
figs, license_ = await _epmc_figures_once(client, pmcid)
if figs or attempt == 2:
return figs, license_
logger.info("PMC 首次解析失败(%s)——重试一次(176 冷连接实测)", pmcid)
return [], ""
# ---------------------------------------------------------------------------
# 对外 API
# ---------------------------------------------------------------------------