修复三个问题:时间戳过滤放宽、系统进程名过滤、EasyOCR CUDA崩溃修复
1. 放宽时间戳过滤:窗口30s→60s,消息长度4字→20字,包含中文即放行 2. 添加系统进程名过滤:200+个Windows/第三方进程名模式,防止混入OCR文本 3. EasyOCR崩溃修复:检测内存不足时设置CUDA_VISIBLE_DEVICES=''禁用CUDA,避免import torch加载CUDA库导致崩溃
This commit is contained in:
+5
-1
@@ -119,6 +119,7 @@ try:
|
||||
)
|
||||
_write_crash_log(f"{datetime.now()} [easyocr_worker] 系统内存压力预检失败: {_msg}")
|
||||
os.environ["EASYOCR_FORCE_CPU"] = "1"
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = "" # 禁用CUDA,防止加载CUDA库导致崩溃
|
||||
sys.stderr.write(f"[easyocr_worker] ⚠️ {_msg},降级CPU模式\n")
|
||||
sys.stderr.flush()
|
||||
elif _avail_phys_gb < 3.0:
|
||||
@@ -129,6 +130,7 @@ try:
|
||||
)
|
||||
_write_crash_log(f"{datetime.now()} [easyocr_worker] 物理内存预检失败: {_msg}")
|
||||
os.environ["EASYOCR_FORCE_CPU"] = "1"
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = "" # 禁用CUDA,防止加载CUDA库导致崩溃
|
||||
sys.stderr.write(f"[easyocr_worker] ⚠️ {_msg},降级CPU模式\n")
|
||||
sys.stderr.flush()
|
||||
except Exception:
|
||||
@@ -169,7 +171,7 @@ def _init_reader():
|
||||
"""初始化 EasyOCR reader(GPU 优先,父进程可强制 CPU)。"""
|
||||
# 先检查环境变量是否强制CPU
|
||||
_force_cpu = os.environ.get("EASYOCR_FORCE_CPU") == "1"
|
||||
|
||||
|
||||
# 再次检查物理内存:加载torch+CUDA需要大量内存,内存不足时强制CPU
|
||||
if not _force_cpu:
|
||||
try:
|
||||
@@ -178,6 +180,7 @@ def _init_reader():
|
||||
_avail_phys_gb = _mem.available / (1024**3)
|
||||
if _avail_phys_gb < 3.0:
|
||||
_force_cpu = True
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = "" # 禁用CUDA,防止加载CUDA库导致崩溃
|
||||
sys.stderr.write(
|
||||
f"[easyocr_worker] ⚠️ 物理内存不足(剩余{_avail_phys_gb:.1f}GB),"
|
||||
f"强制CPU模式(避免CUDA加载导致冻结)\n"
|
||||
@@ -202,6 +205,7 @@ def _init_reader():
|
||||
sys.stderr.write(f"[easyocr_worker] CUDA 健康检查失败({cuda_err}),降级 CPU\n")
|
||||
sys.stderr.flush()
|
||||
use_gpu = False
|
||||
os.environ["CUDA_VISIBLE_DEVICES"] = "" # 禁用CUDA,防止后续崩溃
|
||||
except Exception:
|
||||
use_gpu = False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user