From 7e9a99cda2f67569f4b5d1d4bcfaa9fa1615ccbe Mon Sep 17 00:00:00 2001 From: Yuxuan Zhuang Date: Wed, 21 Jan 2026 16:53:45 -0800 Subject: [PATCH 1/3] force pool close --- .../parallelism/test_multiprocessing.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py b/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py index b4648d16bc7..7295d0e2242 100644 --- a/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py +++ b/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py @@ -129,12 +129,11 @@ def cog(u, ag, frame_id): def test_multiprocess_COG(u): ag = u.atoms[2:5] - ref = np.array([cog(u, ag, i) for i in range(3)]) - p = multiprocessing.Pool(2) - res = np.array([p.apply(cog, args=(u, ag, i)) for i in range(3)]) - p.close() + with multiprocessing.Pool(2) as p: + res = np.array(p.starmap(cog, [(u, ag, i) for i in range(3)])) + assert_equal(ref, res) @@ -147,10 +146,9 @@ def test_universe_unpickle_in_new_process(): u = mda.Universe(GRO, XTC) ref = [getnames(u, i) for i in range(3)] - p = multiprocessing.Pool(2) - res = [p.apply(getnames, args=(u, i)) for i in range(3)] - p.close() - + with multiprocessing.Pool(2) as p: + res = [p.apply_async(getnames, args=(u, i)) for i in range(3)] + res = [r.get() for r in res] assert_equal(ref, res) From 71fe3992de04d72a8e34d64edd4807eba2fcf266 Mon Sep 17 00:00:00 2001 From: Yuxuan Zhuang Date: Wed, 21 Jan 2026 18:35:26 -0800 Subject: [PATCH 2/3] use spawn --- .../parallelism/test_multiprocessing.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py b/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py index 7295d0e2242..efcc15e9e34 100644 --- a/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py +++ b/testsuite/MDAnalysisTests/parallelism/test_multiprocessing.py @@ -131,7 +131,8 @@ def test_multiprocess_COG(u): ag = u.atoms[2:5] ref = np.array([cog(u, ag, i) for i in range(3)]) - with multiprocessing.Pool(2) as p: + ctx = multiprocessing.get_context("spawn") + with ctx.Pool(2) as p: res = np.array(p.starmap(cog, [(u, ag, i) for i in range(3)])) assert_equal(ref, res) @@ -146,7 +147,8 @@ def test_universe_unpickle_in_new_process(): u = mda.Universe(GRO, XTC) ref = [getnames(u, i) for i in range(3)] - with multiprocessing.Pool(2) as p: + ctx = multiprocessing.get_context("spawn") + with ctx.Pool(2) as p: res = [p.apply_async(getnames, args=(u, i)) for i in range(3)] res = [r.get() for r in res] assert_equal(ref, res) @@ -160,7 +162,9 @@ def test_creating_multiple_universe_without_offset(temp_xtc, ncopies=3): # a problem (see PR #3375 and issues #3230, #1988) args = (GRO, str(temp_xtc)) - with multiprocessing.Pool(2) as p: + + ctx = multiprocessing.get_context("spawn") + with ctx.Pool(2) as p: universes = [p.apply_async(mda.Universe, args) for i in range(ncopies)] universes = [universe.get() for universe in universes] From 5d30d48e756a4d72d9d9b5708a8eaaa82f0d30c3 Mon Sep 17 00:00:00 2001 From: Yuxuan Zhuang Date: Wed, 21 Jan 2026 19:26:17 -0800 Subject: [PATCH 3/3] add duration for azure --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 659eeff70d0..c5e80b9c579 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -131,7 +131,7 @@ jobs: displayName: 'Check installed packages' - powershell: | cd testsuite - pytest MDAnalysisTests --disable-pytest-warnings -n logical --timeout=200 -rsx --cov=MDAnalysis + pytest MDAnalysisTests --disable-pytest-warnings -n logical --timeout=200 -rsx --cov=MDAnalysis --durations=50 displayName: 'Run MDAnalysis Test Suite' - script: | curl -s https://codecov.io/bash | bash