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

@ -14,7 +14,7 @@ class TestCLIParsing:
parser.add_argument("input", help="Input directory")
parser.add_argument("-o", "--output", default="/data/output")
parser.add_argument("-r", "--resolution", type=float, default=0.5)
parser.add_argument("-w", "--workers", type=int, default=1)
parser.add_argument("-w", "--workers", type=str, default="auto")
parser.add_argument("-f", "--force", action="store_true")
parser.add_argument("--file", nargs="+", type=str, default=None)
parser.add_argument("--keep-tif", action="store_true")
@ -23,7 +23,7 @@ class TestCLIParsing:
assert args.input == "./input"
assert args.output == "/data/output"
assert args.resolution == 0.5
assert args.workers == 1
assert args.workers == "auto"
assert args.force is False
assert args.file is None
assert args.keep_tif is False

View File

@ -254,3 +254,26 @@ class TestEffectiveGroundMethod:
p = LidarArchaeoPipeline(tmpdir, tmpdir, ground_method='smrf',
ign_classes="sol,unclassified")
assert p._effective_ground_method() == "smrf"
class TestResolveWorkers:
def test_auto_scales_with_cpus(self):
from lidar_pipeline.pipeline import resolve_workers
import os
w = resolve_workers('auto')
assert w == max(2, min((os.cpu_count() or 4) - 2, 16))
def test_auto_bounded(self):
from lidar_pipeline.pipeline import resolve_workers
# Bornes : jamais sous 2, jamais au-dessus de 16
assert 2 <= resolve_workers('auto') <= 16
def test_explicit_int(self):
from lidar_pipeline.pipeline import resolve_workers
assert resolve_workers('4') == 4
assert resolve_workers(7) == 7
def test_invalid_falls_back_to_one(self):
from lidar_pipeline.pipeline import resolve_workers
assert resolve_workers('abc') == 1
assert resolve_workers(None) == 1