summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Stapleton Cordasco <graffatcolmingov@gmail.com>2019-02-17 15:23:12 +0000
committerIan Stapleton Cordasco <graffatcolmingov@gmail.com>2019-02-17 15:23:12 +0000
commita21d74152bff0e24dc27f32c5a6b019cb0b9a0e3 (patch)
tree8d56bf64bf61648500ccf0c763dd6ace80051b0e
parent2170f54cb35d790dc30ef1687a03b599e17fab04 (diff)
parente8f43e12431b15e31a265408b6f79955c6da1690 (diff)
downloadflake8-a21d74152bff0e24dc27f32c5a6b019cb0b9a0e3.tar.gz
Merge branch 'perf_only_one_proc' into 'master'
Speed up flake8 when only 1 filename is passed See merge request pycqa/flake8!305
-rw-r--r--src/flake8/checker.py10
-rw-r--r--tests/unit/test_checker_manager.py20
2 files changed, 14 insertions, 16 deletions
diff --git a/src/flake8/checker.py b/src/flake8/checker.py
index 138bb4f..34db7db 100644
--- a/src/flake8/checker.py
+++ b/src/flake8/checker.py
@@ -73,7 +73,6 @@ class Manager(object):
self.options = style_guide.options
self.checks = checker_plugins
self.jobs = self._job_count()
- self.using_multiprocessing = self.jobs > 1
self.processes = []
self.checkers = []
self.statistics = {
@@ -279,7 +278,6 @@ class Manager(object):
except OSError as oserr:
if oserr.errno not in SERIAL_RETRY_ERRNOS:
raise
- self.using_multiprocessing = False
self.run_serial()
return
@@ -326,16 +324,10 @@ class Manager(object):
fallback to serial processing.
"""
try:
- if self.using_multiprocessing:
+ if self.jobs > 1 and len(self.checkers) > 1:
self.run_parallel()
else:
self.run_serial()
- except OSError as oserr:
- if oserr.errno not in SERIAL_RETRY_ERRNOS:
- LOG.exception(oserr)
- raise
- LOG.warning("Running in serial after OS exception, %r", oserr)
- self.run_serial()
except KeyboardInterrupt:
LOG.warning("Flake8 was interrupted by the user")
raise exceptions.EarlyQuit("Early quit while running checks")
diff --git a/tests/unit/test_checker_manager.py b/tests/unit/test_checker_manager.py
index 2b6cb76..50f4084 100644
--- a/tests/unit/test_checker_manager.py
+++ b/tests/unit/test_checker_manager.py
@@ -16,27 +16,33 @@ def style_guide_mock(**kwargs):
return style_guide
+def _parallel_checker_manager():
+ """Call Manager.run() and return the number of calls to `run_serial`."""
+ style_guide = style_guide_mock()
+ manager = checker.Manager(style_guide, [], [])
+ # multiple checkers is needed for parallel mode
+ manager.checkers = [mock.Mock(), mock.Mock()]
+ return manager
+
+
def test_oserrors_cause_serial_fall_back():
"""Verify that OSErrors will cause the Manager to fallback to serial."""
err = OSError(errno.ENOSPC, 'Ominous message about spaceeeeee')
- style_guide = style_guide_mock()
with mock.patch('_multiprocessing.SemLock', side_effect=err):
- manager = checker.Manager(style_guide, [], [])
+ manager = _parallel_checker_manager()
with mock.patch.object(manager, 'run_serial') as serial:
manager.run()
assert serial.call_count == 1
- assert manager.using_multiprocessing is False
@mock.patch('flake8.utils.is_windows', return_value=False)
def test_oserrors_are_reraised(is_windows):
"""Verify that unexpected OSErrors will cause the Manager to reraise."""
err = OSError(errno.EAGAIN, 'Ominous message')
- style_guide = style_guide_mock()
with mock.patch('_multiprocessing.SemLock', side_effect=err):
- with pytest.raises(OSError):
- manager = checker.Manager(style_guide, [], [])
- with mock.patch.object(manager, 'run_serial') as serial:
+ manager = _parallel_checker_manager()
+ with mock.patch.object(manager, 'run_serial') as serial:
+ with pytest.raises(OSError):
manager.run()
assert serial.call_count == 0