summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-12-18 12:51:09 -0800
committerGitHub <noreply@github.com>2019-12-18 12:51:09 -0800
commitb8bbdf049b0472b8edc4298bfa61e62e3a584e98 (patch)
tree39a70e896a0f38121f03d824a708046963b762cd
parent3dbfe0ac93ce031a23342a62edd39506bcdaea0e (diff)
downloadcpython-git-b8bbdf049b0472b8edc4298bfa61e62e3a584e98.tar.gz
bpo-38546: Fix concurrent.futures test_ressources_gced_in_workers() (GH-17652) (GH-17655)
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. (cherry picked from commit 673c39331f844a80c465efd7cff88ac55c432bfb) (cherry picked from commit b0eb046cbd0dbb7b17f16aad6de20fac5305f387) Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r--Lib/test/test_concurrent_futures.py14
-rw-r--r--Misc/NEWS.d/next/Tests/2019-12-18-14-52-08.bpo-38546.2kxNuM.rst3
2 files changed, 14 insertions, 3 deletions
diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py
index ad68909161..b42670e16a 100644
--- a/Lib/test/test_concurrent_futures.py
+++ b/Lib/test/test_concurrent_futures.py
@@ -84,8 +84,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):
@@ -818,12 +817,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
+ test.support.gc_collect()
+
+ mgr.shutdown()
+ mgr.join()
+
create_executor_tests(ProcessPoolExecutorTest,
executor_mixins=(ProcessPoolForkMixin,
diff --git a/Misc/NEWS.d/next/Tests/2019-12-18-14-52-08.bpo-38546.2kxNuM.rst b/Misc/NEWS.d/next/Tests/2019-12-18-14-52-08.bpo-38546.2kxNuM.rst
new file mode 100644
index 0000000000..d8ec7cabbb
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-12-18-14-52-08.bpo-38546.2kxNuM.rst
@@ -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.