Rendre effectif le délai de sécurité de 2 h des workers parallèles
This commit is contained in:
@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user