Workers parallèles adaptatifs : -w auto = cœurs - 2, résolu au lancement de chaque run

This commit is contained in:
Antoine Jacquin
2026-09-19 21:58:47 +02:00
parent 900bf5ee89
commit 5ef0232c80
6 changed files with 59 additions and 8 deletions

View File

@ -9,6 +9,7 @@ LidarArchaeoPipeline coordinates the full processing chain:
import logging
import multiprocessing
import os
import shutil
import time
from concurrent.futures import ProcessPoolExecutor, as_completed, TimeoutError as FuturesTimeoutError
@ -25,6 +26,25 @@ except RuntimeError:
logger = logging.getLogger("lidar")
def resolve_workers(value):
"""Traduit l'option -w en nombre effectif de workers.
Résolu au lancement de chaque run (pas au démarrage du serveur, ni par
tuile : le pool de processus vit le temps du run). « auto » = cœurs
logiques - 2 (un pour l'OS/serveur, un pour les phases I/O et
l'indexation), borné [2, 16] — chaque worker traite une tuile et peut
lancer un processus PDAL en flux, le compte reste raisonnable même sur
une grosse machine.
"""
if isinstance(value, str) and value.strip().lower() == "auto":
cpus = os.cpu_count() or 4
return max(2, min(cpus - 2, 16))
try:
return max(1, int(value))
except (TypeError, ValueError):
return 1
def _file_basename(path):
"""Extract base name from a LAZ/LAS file, removing all known extensions.