瀏覽代碼

完善适配NPU

何文松 3 周之前
父節點
當前提交
cef9cd4ccf
共有 1 個文件被更改,包括 28 次插入2 次删除
  1. 28 2
      pdf_converter_v2/paddleocr_fallback.py

+ 28 - 2
pdf_converter_v2/paddleocr_fallback.py

@@ -129,12 +129,34 @@ def _decrement_service_count(lock_file: object) -> int:
         return 0
 
 
+def _systemd_available() -> bool:
+    """检测当前环境是否有 systemd(容器内通常无 systemd,无法操作 mineru-api.service)"""
+    try:
+        r = subprocess.run(
+            ["systemctl", "status", "--no-pager"],
+            capture_output=True,
+            text=True,
+            timeout=3,
+            check=False,
+        )
+        err = (r.stderr or "") + (r.stdout or "")
+        if "Failed to connect to bus" in err or "not been booted with systemd" in err:
+            return False
+        return True
+    except (FileNotFoundError, subprocess.TimeoutExpired, Exception):
+        return False
+
+
 def stop_mineru_service() -> bool:
     """停止mineru-api.service以释放GPU内存(线程安全)
+    容器内无 systemd 时直接返回 True,不报错。
     
     Returns:
-        True表示成功停止或已停止,False表示失败
+        True表示成功停止或已停止/无需操作,False表示失败
     """
+    if not _systemd_available():
+        logger.debug("[PaddleOCR] 无 systemd,跳过停止 mineru-api.service")
+        return True
     lock_file = _acquire_service_lock()
     if not lock_file:
         # 如果无法获取锁,等待一小段时间后检查服务状态
@@ -200,10 +222,14 @@ def stop_mineru_service() -> bool:
 
 def start_mineru_service() -> bool:
     """启动mineru-api.service(线程安全)
+    容器内无 systemd 时直接返回 True,不报错。
     
     Returns:
-        True表示成功启动或已启动,False表示失败
+        True表示成功启动或已启动/无需操作,False表示失败
     """
+    if not _systemd_available():
+        logger.debug("[PaddleOCR] 无 systemd,跳过启动 mineru-api.service")
+        return True
     lock_file = _acquire_service_lock()
     if not lock_file:
         # 如果无法获取锁,等待一小段时间后检查服务状态