From 1d51e5706a9983c99761c7a65e6d79cfb9bf7462 Mon Sep 17 00:00:00 2001 From: Nathan Goldbaum Date: Thu, 24 Apr 2025 08:42:02 -0600 Subject: [PATCH 1/2] attempt to fix 32 bit architectures --- src/pytest_run_parallel/plugin.py | 79 ++++++++++++++++--------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/src/pytest_run_parallel/plugin.py b/src/pytest_run_parallel/plugin.py index 42d3d03..dc419b1 100644 --- a/src/pytest_run_parallel/plugin.py +++ b/src/pytest_run_parallel/plugin.py @@ -65,52 +65,55 @@ def pytest_configure(config): def wrap_function_parallel(fn, n_workers, n_iterations): - barrier = threading.Barrier(n_workers) - original_switch = sys.getswitchinterval() - sys.setswitchinterval(0.000001) - @functools.wraps(fn) def inner(*args, **kwargs): errors = [] skip = None failed = None - - def closure(*args, **kwargs): - for _ in range(n_iterations): - barrier.wait() - try: - fn(*args, **kwargs) - except Warning: - pass - except Exception as e: - errors.append(e) - except _pytest.outcomes.Skipped as s: - nonlocal skip - skip = s.msg - except _pytest.outcomes.Failed as f: - nonlocal failed - failed = f - - workers = [] - for _ in range(0, n_workers): - worker_kwargs = kwargs - workers.append( - threading.Thread(target=closure, args=args, kwargs=worker_kwargs) - ) - - num_completed = 0 + barrier = threading.Barrier(n_workers) + original_switch = sys.getswitchinterval() try: - for worker in workers: - worker.start() - num_completed += 1 - finally: - if num_completed < len(workers): - barrier.abort() + sys.setswitchinterval(0.000001) + + def closure(*args, **kwargs): + for _ in range(n_iterations): + barrier.wait() + try: + fn(*args, **kwargs) + except Warning: + pass + except Exception as e: + errors.append(e) + except _pytest.outcomes.Skipped as s: + nonlocal skip + skip = s.msg + except _pytest.outcomes.Failed as f: + nonlocal failed + failed = f + + workers = [] + for _ in range(0, n_workers): + worker_kwargs = kwargs + workers.append( + threading.Thread( + target=closure, args=args, kwargs=worker_kwargs + ) + ) + + num_completed = 0 + try: + for worker in workers: + worker.start() + num_completed += 1 + finally: + if num_completed < len(workers): + barrier.abort() - for worker in workers: - worker.join() + for worker in workers: + worker.join() - sys.setswitchinterval(original_switch) + finally: + sys.setswitchinterval(original_switch) if skip is not None: pytest.skip(skip) From feed20573c21c15178793186beffe984b60ec17f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 14:47:11 +0000 Subject: [PATCH 2/2] [pre-commit.ci lite] apply automatic fixes --- src/pytest_run_parallel/plugin.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pytest_run_parallel/plugin.py b/src/pytest_run_parallel/plugin.py index dc419b1..5548cba 100644 --- a/src/pytest_run_parallel/plugin.py +++ b/src/pytest_run_parallel/plugin.py @@ -95,9 +95,7 @@ def closure(*args, **kwargs): for _ in range(0, n_workers): worker_kwargs = kwargs workers.append( - threading.Thread( - target=closure, args=args, kwargs=worker_kwargs - ) + threading.Thread(target=closure, args=args, kwargs=worker_kwargs) ) num_completed = 0