启用md2img强保活模式:移除浏览器主动关闭逻辑

1. safe_close_browser 改为保活模式下直接返回,不执行 browser.close\n2. 去除 safe_close_browser 中的 terminate/kill 进程树逻辑\n3. 保留函数签名与调用链,确保现有流程兼容\n4. 增加中文注释说明长期常驻场景下的设计意图
This commit is contained in:
liuwei
2026-04-17 11:46:35 +08:00
parent cc5c49954f
commit 23d2f2562e

View File

@@ -120,59 +120,17 @@ def _simple_markdown_to_html(md_content: str) -> str:
async def safe_close_browser(browser, timeout: float = 4.0) -> None:
"""保活优先:不执行浏览器关闭。
设计说明:
1. 当前业务要求浏览器进程长期常驻,因此这里显式禁用“主动关闭进程”;
2. 即使上层调用了 safe_close_browser也只记录日志并直接返回
3. 保留函数签名是为了兼容现有调用点,避免大范围改动影响稳定性。
"""
if not browser:
return
for context in browser.contexts[:]:
for page in context.pages[:]:
try:
await asyncio.wait_for(page.close(), timeout=1.5)
except Exception:
pass
try:
await asyncio.wait_for(context.close(), timeout=timeout)
except Exception:
pass
try:
await asyncio.wait_for(browser.close(), timeout=timeout)
logger.debug("browser closed gracefully")
return
except (asyncio.TimeoutError, Exception) as e:
logger.warning(f"browser.close failed: {e}")
if browser.process and browser.process.pid:
try:
parent = psutil.Process(browser.process.pid)
children = parent.children(recursive=True)
for proc in children:
try:
proc.terminate()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
try:
parent.terminate()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
try:
gone, alive = psutil.wait_procs([parent] + children, timeout=2)
except Exception:
gone, alive = [], [parent] + children
for proc in alive:
try:
proc.kill()
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
try:
gone, alive = psutil.wait_procs([parent] + children, timeout=3)
except Exception:
alive = []
if alive:
logger.warning(f"process still alive after kill: {[p.pid for p in alive]}")
else:
logger.debug("process tree terminated")
except (psutil.NoSuchProcess, Exception) as e:
logger.warning(f"force kill failed: {e}")
logger.info("[md2img] 保活模式:跳过 safe_close_browser不主动关闭浏览器进程")
return
def _clean_text(html: str) -> str: