From 900bf5ee891cadce5ff476adfa18946764969d9f Mon Sep 17 00:00:00 2001 From: Antoine Jacquin Date: Sat, 19 Sep 2026 21:43:56 +0200 Subject: [PATCH] =?UTF-8?q?R=C3=A9essayer=20le=20sous-tuilage=20quand=20la?= =?UTF-8?q?=20dalle=20source=20est=20en=20cours=20d'=C3=A9criture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lidar_pipeline/index.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/lidar_pipeline/index.py b/lidar_pipeline/index.py index bc0b347..2559a64 100644 --- a/lidar_pipeline/index.py +++ b/lidar_pipeline/index.py @@ -823,12 +823,24 @@ def _build_subtiles(tile, offered_viz_keys, output_dir, sub_dir_name): if not heavy_fresh: logger.info(f" Sous-tuiles recalculées : {tile['dir_name']}/{viz_key} " f"({len(stems)} découpages)") - try: - img = PILImage.open(str(src)) - img.load() - except Exception as e: - logger.debug(f"Sous-tuilage {viz_key} impossible ({src.name}): {e}") - _fallback_full_dalle(entries, viz_key, info) + img = None + for attempt in range(2): + try: + img = PILImage.open(str(src)) + img.load() + break + except Exception as e: + # Rebuild incrémental pendant un run : la dalle source + # peut être en cours d'écriture par un worker voisin + # (lecture partielle). Une tentative après une courte + # pause suffit presque toujours. + if attempt == 0: + time.sleep(2.0) + continue + logger.warning(f"Sous-tuilage {viz_key} impossible après " + f"nouvelle tentative ({src.name}) : {e}") + _fallback_full_dalle(entries, viz_key, info) + if img is None: continue if img.mode not in ('RGB', 'L'): img = img.convert('RGB')