v0.0.61: параллельность убрана — .doc через liberta последовательно (liberta не тянет конкурентность, javaldx), LLM _LLM_CONCURRENCY=1
Deploy drhider / validate (push) Canceled after 0s
Deploy drhider / validate (push) Canceled after 0s
This commit is contained in:
+4
-18
@@ -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
@@ -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
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user