diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-07-04 11:14:04 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-04 11:14:04 (GMT) |
commit | 3df9dec425b0254df1cdf41922fd8d6b08bf47e4 (patch) | |
tree | cc5165b34102dbdbe616f0e8f78516e7fa8deeb5 | |
parent | 48350412b70c76fa51f488cfc736c80d59b5e8eb (diff) | |
download | cpython-3df9dec425b0254df1cdf41922fd8d6b08bf47e4.zip cpython-3df9dec425b0254df1cdf41922fd8d6b08bf47e4.tar.gz cpython-3df9dec425b0254df1cdf41922fd8d6b08bf47e4.tar.bz2 |
bpo-30845: Enhance test_concurrent_futures cleanup (#2564)
* bpo-30845: reap_children() now logs warnings
* bpo-30845: Enhance test_concurrent_futures cleanup
In setUp() and tearDown() methods of test_concurrent_futures tests,
make sure that tests don't leak threads nor processes. Clear
explicitly the reference to the executor to make it that it's
destroyed (to prevent "dangling threads" warning).
-rw-r--r-- | Lib/test/support/__init__.py | 3 | ||||
-rw-r--r-- | Lib/test/test_concurrent_futures.py | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 3cfa487..313c230 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2079,7 +2079,6 @@ def reap_children(): stick around to hog resources and create problems when looking for refleaks. """ - # Reap all our dead child processes so we don't leave zombies around. # These hog resources and might be causing some of the buildbots to die. if hasattr(os, 'waitpid'): @@ -2090,6 +2089,8 @@ def reap_children(): pid, status = os.waitpid(any_process, os.WNOHANG) if pid == 0: break + print("Warning -- reap_children() reaped child process %s" + % pid, file=sys.stderr) except: break diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py index e2da47b..c649555 100644 --- a/Lib/test/test_concurrent_futures.py +++ b/Lib/test/test_concurrent_futures.py @@ -63,6 +63,8 @@ class ExecutorMixin: worker_count = 5 def setUp(self): + self._thread_cleanup = test.support.threading_setup() + self.t1 = time.time() try: self.executor = self.executor_type(max_workers=self.worker_count) @@ -72,11 +74,16 @@ class ExecutorMixin: def tearDown(self): self.executor.shutdown(wait=True) + self.executor = None + dt = time.time() - self.t1 if test.support.verbose: print("%.2fs" % dt, end=' ') self.assertLess(dt, 60, "synchronization issue: test lasted too long") + test.support.threading_cleanup(*self._thread_cleanup) + test.support.reap_children() + def _prime_executor(self): # Make sure that the executor is ready to do work before running the # tests. This should reduce the probability of timeouts in the tests. |