(original) (raw)

changeset: 85448:6d998a43102b user: Richard Oudkerk shibturn@gmail.com date: Thu Aug 29 14:37:47 2013 +0100 files: Lib/test/_test_multiprocessing.py description: Issue #8713: Print dangling processes/threads, if any. diff -r e99832a60e63 -r 6d998a43102b Lib/test/_test_multiprocessing.py --- a/Lib/test/_test_multiprocessing.py Thu Aug 29 12:51:11 2013 +0100 +++ b/Lib/test/_test_multiprocessing.py Thu Aug 29 14:37:47 2013 +0100 @@ -3730,9 +3730,15 @@ Temp.__module__ = __module__ remote_globs[name] = Temp + dangling = [None, None] + old_start_method = [None] + def setUpModule(): multiprocessing.set_forkserver_preload(PRELOAD) - remote_globs['old_start_method'] = multiprocessing.get_start_method() + multiprocessing.process._cleanup() + dangling[0] = multiprocessing.process._dangling.copy() + dangling[1] = threading._dangling.copy() + old_start_method[0] = multiprocessing.get_start_method() try: multiprocessing.set_start_method(start_method) except ValueError: @@ -3750,9 +3756,18 @@ multiprocessing.get_logger().setLevel(LOG_LEVEL) def tearDownModule(): - multiprocessing.set_start_method(remote_globs['old_start_method']) + multiprocessing.set_start_method(old_start_method[0]) # pause a bit so we don't get warning about dangling threads/processes time.sleep(0.5) + multiprocessing.process._cleanup() + gc.collect() + tmp = set(multiprocessing.process._dangling) - set(dangling[0]) + if tmp: + print('Dangling processes:', tmp, file=sys.stderr) + del tmp + tmp = set(threading._dangling) - set(dangling[1]) + if tmp: + print('Dangling threads:', tmp, file=sys.stderr) remote_globs['setUpModule'] = setUpModule remote_globs['tearDownModule'] = tearDownModule /shibturn@gmail.com