From c8d81184f74453bba7fd430ff2944dc3a6bc6873 Mon Sep 17 00:00:00 2001 From: Sara Mirzaee <37273875+mirzaees@users.noreply.github.com> Date: Tue, 31 Mar 2026 10:33:24 -0400 Subject: [PATCH] use forkserver to avoid HDF5 deadlocks --- src/opera_utils/disp/rebase_reference.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/opera_utils/disp/rebase_reference.py b/src/opera_utils/disp/rebase_reference.py index 41dd69d..15a7070 100644 --- a/src/opera_utils/disp/rebase_reference.py +++ b/src/opera_utils/disp/rebase_reference.py @@ -631,7 +631,9 @@ def main( # Transfer the quality layers (no rebasing needed) all_products = DispProductStack.from_file_list(nc_files) - with multiprocessing.Pool(num_workers) as pool: + # Use 'forkserver' to avoid h5py/HDF5 mutex deadlocks that occur with 'fork' + mp_ctx = multiprocessing.get_context("forkserver") + with mp_ctx.Pool(num_workers) as pool: list( pool.starmap( extract_quality_layers, @@ -664,7 +666,7 @@ def main( futures: set[Future] = set() mask_dataset = QualityDataset.RECOMMENDED_MASK if apply_mask else None - with ProcessPoolExecutor(num_workers) as pool: + with ProcessPoolExecutor(num_workers, mp_context=mp_ctx) as pool: # Submit time series rebase function futures.add( pool.submit(