Rendre effectif le délai de sécurité de 2 h des workers parallèles

This commit is contained in:
Antoine Jacquin
2026-09-18 21:08:25 +02:00
parent 4cdbf5a0e4
commit bb086e308a

View File

@ -11,7 +11,7 @@ import logging
import multiprocessing import multiprocessing
import shutil import shutil
import time import time
from concurrent.futures import ProcessPoolExecutor, as_completed from concurrent.futures import ProcessPoolExecutor, as_completed, TimeoutError as FuturesTimeoutError
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
import subprocess import subprocess
@ -589,12 +589,13 @@ class LidarArchaeoPipeline:
done = 0 done = 0
t_deadline = time.time() + 7200 t_deadline = time.time() + 7200
try: try:
for future in as_completed(future_to_file): # timeout= : sans lui, as_completed bloque entre deux
if time.time() > t_deadline: # complétions et le délai de 2 h n'est jamais évalué si
logger.error("Délai dépassé (2h) — annulation des workers restants") # aucun worker ne rend la main (run figé pour toujours).
for f in future_to_file: try:
f.cancel() futures_iter = as_completed(future_to_file,
break timeout=max(1.0, t_deadline - time.time()))
for future in futures_iter:
laz_file = future_to_file[future] laz_file = future_to_file[future]
done += 1 done += 1
try: try:
@ -610,6 +611,10 @@ class LidarArchaeoPipeline:
report_event(self.output_dir, _file_basename(laz_file), report_event(self.output_dir, _file_basename(laz_file),
"tile", "fail", detail=str(e)) "tile", "fail", detail=str(e))
results[laz_file.name] = False results[laz_file.name] = False
except FuturesTimeoutError:
logger.error("Délai dépassé (2h) — annulation des workers restants")
for f in future_to_file:
f.cancel()
except KeyboardInterrupt: except KeyboardInterrupt:
logger.info("Interruption — annulation des travaux en cours...") logger.info("Interruption — annulation des travaux en cours...")
for f in future_to_file: for f in future_to_file: