a useful decorator for cleaning up threads

This commit is contained in:
Benjamin Peterson 2009-05-14 22:40:34 +00:00
parent 92d102bf6d
commit 0db3cd6700
2 changed files with 13 additions and 7 deletions

View File

@ -254,14 +254,9 @@ class HashLibTestCase(unittest.TestCase):
self.assertEqual(expected_hash, hasher.hexdigest())
@test_support.reap_threads
def test_main():
key = test_support.threading_setup()
try:
test_support.run_unittest(HashLibTestCase)
finally:
test_support.threading_cleanup(*key)
test_support.run_unittest(HashLibTestCase)
if __name__ == "__main__":
test_main()

View File

@ -5,6 +5,7 @@ if __name__ != 'test.test_support':
import contextlib
import errno
import functools
import socket
import sys
import os
@ -934,6 +935,16 @@ def threading_cleanup(num_active, num_limbo):
count += 1
time.sleep(0.1)
def reap_threads(func):
@functools.wraps(func)
def decorator(*args):
key = threading_setup()
try:
return func(*args)
finally:
threading_cleanup(*key)
return decorator
def reap_children():
"""Use this function at the end of test_main() whenever sub-processes
are started. This will help ensure that no extra children (zombies)