Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Fix @reap_threads usage in test_free_threading.test_json
Use the decorator on test methods, not on the whole class.

Previously, test_json ran no tests:

    $ ./python -m test -v test_free_threading.test_json -v
    ...
    Ran 0 tests in 0.000s

    NO TESTS RAN

Add also a check in @reap_threads to detect misuse (on a class).
  • Loading branch information
vstinner committed Oct 6, 2026
commit 02ce7f6a1de5f8165b88d65e52ca1c8c1b2a0987
6 changes: 6 additions & 0 deletions Lib/test/support/threading_helper.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import _thread
import contextlib
import functools
import inspect
import sys
import threading
import time
Expand Down Expand Up @@ -59,6 +60,11 @@ def reap_threads(func):
"""Use this function when threads are being used. This will
ensure that the threads are cleaned up even when the test fails.
"""

if inspect.isclass(func):
# It should be used on each test method, not on the whole class
raise ValueError("@reap_threads is not compatible with classes")

@functools.wraps(func)
def decorator(*args):
key = threading_setup()
Expand Down
4 changes: 3 additions & 1 deletion Lib/test/test_free_threading/test_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ def items(self):
return self.mapping


@threading_helper.reap_threads
@threading_helper.requires_working_threading()
class TestJsonEncoding(CTest):
# Test encoding json with concurrent threads modifying the data cannot
# corrupt the interpreter

@threading_helper.reap_threads
def test_json_mutating_list(self):
def worker(barrier, data, index):
barrier.wait()
Expand All @@ -48,6 +48,7 @@ def worker(barrier, data, index):
data = [[], []]
encode_json_helper(self.json, worker, data)

@threading_helper.reap_threads
def test_json_mutating_exact_dict(self):
def worker(barrier, data, index):
barrier.wait()
Expand All @@ -65,6 +66,7 @@ def worker(barrier, data, index):
data = [{}, {}]
encode_json_helper(self.json, worker, data)

@threading_helper.reap_threads
def test_json_mutating_mapping(self):
def worker(barrier, data, index):
barrier.wait()
Expand Down
Loading