v0.0.61: параллельность убрана — .doc через liberta последовательно (liberta не тянет конкурентность, javaldx), LLM _LLM_CONCURRENCY=1
Deploy drhider / validate (push) Canceled after 0s

This commit is contained in:
“Naeel”
2026-08-23 12:02:32 +03:00
parent c17fca792c
commit 1509eeb989
3 changed files with 6 additions and 20 deletions
+4 -18
View File
@@ -11,7 +11,6 @@ import io
import os
import time
import logging
from concurrent.futures import ThreadPoolExecutor
from typing import Dict, List, Tuple, Callable, Optional
from . import extractor
@@ -118,19 +117,9 @@ class TwoPassObfuscator:
file_times: List[float] = [0.0] * total
skipped: set = set() # имена файлов, которые не удалось обработать (битые)
# A1: .doc конвертируются через HTTP-сервис liberta (IO-bound).
# Запускаем их в потоках — GIL не мешает (ожидание сети), а основное
# время (PDF/docx, CPU-bound) перекрывается с HTTP-конвертацией .doc.
doc_futures: Dict[int, object] = {}
doc_indices = [i for i, (f, _, _) in enumerate(files)
if f.lower().endswith('.doc')]
if doc_indices:
with ThreadPoolExecutor(max_workers=min(4, len(doc_indices))) as _ex:
for i in doc_indices:
fname, content, ctype = files[i]
doc_futures[i] = _ex.submit(
extractor.extract_text, fname, content, ctype
)
# A1: .doc конвертируются через HTTP-сервис liberta ПОСЛЕДОВАТЕЛЬНО.
# Без параллельности: liberta не выдерживает конкурентные вызовы
# (libreoffice падает с javaldx).
for i, (fname, content, ctype) in enumerate(files):
display_name = os.path.basename(fname) or fname
@@ -139,10 +128,7 @@ class TwoPassObfuscator:
t0 = time.time()
try:
if i in doc_futures:
text = doc_futures[i].result()
else:
text = extractor.extract_text(fname, content, ctype)
text = extractor.extract_text(fname, content, ctype)
except Exception as e:
log.warning("obfuscate: skip file %r: %r", fname, e)
skipped.add(fname)
+1 -1
View File
@@ -115,7 +115,7 @@ def scan_regex(text: str, mapping: Dict[str, str], counters: Dict[str, int]) ->
_CHUNK_BOUNDARIES = ['\n\n', '\n', '. ', '? ', '! ', '; ', ', ', ' ']
_CHUNK_SIZE = 6000 # символов на чанк (≈1500-2000 токенов RU — NER-качество)
_CHUNK_OVERLAP = 500 # перекрытие чанков (сущности на стыке)
_LLM_CONCURRENCY = 4 # параллельных LLM-вызовов
_LLM_CONCURRENCY = 1 # параллельность убрана — всё последовательно (liberta/LLM не тянет конкурентность)
def split_into_chunks(text: str, size: int = _CHUNK_SIZE,
+1 -1
View File
@@ -21,7 +21,7 @@ if _sys_path_root not in sys.path:
sys.path.insert(0, _sys_path_root)
# Версия приложения (меняется при изменениях)
VERSION = "0.0.60"
VERSION = "0.0.61"
def setup_logging():