bpo-38546: Fix concurrent.futures test_ressources_gced_in_workers() (GH-17652)

Fix test_ressources_gced_in_workers() of test_concurrent_futures:
explicitly stop the manager to prevent leaking a child process
running in the background after the test completes.
This commit is contained in:
Victor Stinner 2019-12-18 15:50:04 +01:00 committed by GitHub
parent 75bb07e92b
commit 673c39331f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 3 deletions

View File

@ -87,8 +87,7 @@ class MyObject(object):
class EventfulGCObj():
def __init__(self, ctx):
mgr = get_context(ctx).Manager()
def __init__(self, mgr):
self.event = mgr.Event()
def __del__(self):
@ -847,12 +846,21 @@ class ProcessPoolExecutorTest(ExecutorTest):
def test_ressources_gced_in_workers(self):
# Ensure that argument for a job are correctly gc-ed after the job
# is finished
obj = EventfulGCObj(self.ctx)
mgr = get_context(self.ctx).Manager()
obj = EventfulGCObj(mgr)
future = self.executor.submit(id, obj)
future.result()
self.assertTrue(obj.event.wait(timeout=1))
# explicitly destroy the object to ensure that EventfulGCObj.__del__()
# is called while manager is still running.
obj = None
support.gc_collect()
mgr.shutdown()
mgr.join()
create_executor_tests(ProcessPoolExecutorTest,
executor_mixins=(ProcessPoolForkMixin,

View File

@ -0,0 +1,3 @@
Fix test_ressources_gced_in_workers() of test_concurrent_futures: explicitly
stop the manager to prevent leaking a child process running in the background
after the test completes.