[tor-commits] [nyx/master] Run static checks in the background
atagar at torproject.org
atagar at torproject.org
Sat Aug 19 18:47:24 UTC 2017
commit c03d05abdec29eebba2d3ed0f15c7e5f46aa658b
Author: Damian Johnson <atagar at torproject.org>
Date: Wed Aug 16 07:46:03 2017 -0700
Run static checks in the background
Stem got quite a substantial speedup in its tests by running long-running tasks
in the background. Nyx is a much smaller test suite so not much to gain, but
might as well improve things a tad here too.
Running pyflakes and pycodestyle in the background. On my laptop this drops the
test runtime from 3.8s to 2.4s (37% faster).
---
run_tests.py | 41 +++++++++++++++++++++++++++++------------
1 file changed, 29 insertions(+), 12 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index 2b76561..e115552 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -9,6 +9,7 @@ render to the screen.
"""
import os
+import multiprocessing
import unittest
import stem.util.conf
@@ -27,6 +28,12 @@ SRC_PATHS = [os.path.join(NYX_BASE, path) for path in (
)]
+def _run_wrapper(conn, runner, args):
+ os.nice(15)
+ conn.send(runner(*args) if args else runner())
+ conn.close()
+
+
@nyx.uses_settings
def main():
nyx.TESTING = True
@@ -38,7 +45,20 @@ def main():
for path in orphaned_pyc:
print('Deleted orphaned pyc file: %s' % path)
- tests = unittest.defaultTestLoader.discover('test', pattern='*.py')
+ pyflakes_task, pyflakes_pipe = None, None
+ pycodestyle_task, pycodestyle_pipe = None, None
+
+ if stem.util.test_tools.is_pyflakes_available():
+ pyflakes_pipe, child_pipe = multiprocessing.Pipe()
+ pyflakes_task = multiprocessing.Process(target = _run_wrapper, args = (child_pipe, stem.util.test_tools.pyflakes_issues, (SRC_PATHS,)))
+ pyflakes_task.start()
+
+ if stem.util.test_tools.is_pep8_available():
+ pycodestyle_pipe, child_pipe = multiprocessing.Pipe()
+ pycodestyle_task = multiprocessing.Process(target = _run_wrapper, args = (child_pipe, stem.util.test_tools.stylistic_issues, (SRC_PATHS, True, True, True)))
+ pycodestyle_task.start()
+
+ tests = unittest.defaultTestLoader.discover('test', pattern = '*.py')
test_runner = unittest.TextTestRunner()
test_runner.run(tests)
@@ -46,22 +66,19 @@ def main():
static_check_issues = {}
- if stem.util.test_tools.is_pyflakes_available():
- pyflakes_issues = stem.util.test_tools.pyflakes_issues(SRC_PATHS)
+ if pyflakes_task:
+ pyflakes_issues = pyflakes_pipe.recv()
+ pyflakes_task.join()
for path, issues in pyflakes_issues.items():
for issue in issues:
static_check_issues.setdefault(path, []).append(issue)
- if stem.util.test_tools.is_pep8_available():
- pep8_issues = stem.util.test_tools.stylistic_issues(
- SRC_PATHS,
- check_newlines = True,
- check_exception_keyword = True,
- prefer_single_quotes = True,
- )
-
- for path, issues in pep8_issues.items():
+ if pycodestyle_task:
+ pycodestyle_issues = pycodestyle_pipe.recv()
+ pycodestyle_task.join()
+
+ for path, issues in pycodestyle_issues.items():
for issue in issues:
static_check_issues.setdefault(path, []).append(issue)
More information about the tor-commits
mailing list