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:
parent
75bb07e92b
commit
673c39331f
|
@ -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,
|
||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue