Workers parallèles adaptatifs : -w auto = cœurs - 2, résolu au lancement de chaque run
This commit is contained in:
@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user