summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Cordasco <graffatcolmingov@gmail.com>2016-03-14 21:38:56 -0500
committerIan Cordasco <graffatcolmingov@gmail.com>2016-03-14 21:38:56 -0500
commit07b9ffbeb9a9e68ce9376f56595ece772ee628cf (patch)
treea98285864e36d5b71c7feadb1b2f23dd0e14263c
parentd222fcb9e118bec3b051355d12da0f6aa9cce163 (diff)
downloadflake8-07b9ffbeb9a9e68ce9376f56595ece772ee628cf.tar.gz
Add naive multiprocessing support
-rw-r--r--flake8/checker.py52
-rw-r--r--flake8/main/cli.py3
2 files changed, 44 insertions, 11 deletions
diff --git a/flake8/checker.py b/flake8/checker.py
index 7422427..0398187 100644
--- a/flake8/checker.py
+++ b/flake8/checker.py
@@ -116,12 +116,27 @@ class Manager(object):
def start(self):
"""Start checking files."""
- pass
- # for i in range(self.jobs or 0):
- # proc = multiprocessing.Process(target=self.process_files)
- # proc.daemon = True
- # proc.start()
- # self.processes.append(proc)
+ LOG.info('Making checkers')
+ self.make_checkers()
+ if not self.using_multiprocessing:
+ return
+
+ LOG.info('Populating process queue')
+ for checker in self.checkers:
+ self.process_queue.put(checker)
+
+ def stop(self):
+ """Stop checking files."""
+ if not self.using_multiprocessing:
+ return
+
+ LOG.info('Notifying process workers of completion')
+ for i in range(self.jobs or 0):
+ self.process_queue.put('DONE')
+
+ LOG.info('Joining process workers')
+ for process in self.processes:
+ process.join()
def make_checkers(self, paths=None):
# type: (List[str]) -> NoneType
@@ -137,13 +152,30 @@ class Manager(object):
if utils.fnmatch(filename, filename_patterns)
]
+ def _run_checks_from_queue(self):
+ LOG.info('Running checks in parallel')
+ for checker in iter(self.process_queue.get, 'DONE'):
+ LOG.debug('Running checker for file "%s"', checker.filename)
+ checker.run_checks()
+
def run(self):
- """Run checks.
+ """Run all the checkers.
- TODO(sigmavirus24): Get rid of this
+ This handles starting the process workers or just simply running all
+ of the checks in serial.
"""
- for checker in self.checkers:
- checker.run_checks()
+ if self.using_multiprocessing:
+ LOG.info('Starting process workers')
+ for i in range(self.jobs or 0):
+ proc = multiprocessing.Process(
+ target=self._run_checks_from_queue
+ )
+ proc.daemon = True
+ proc.start()
+ self.processes.append(proc)
+ else:
+ for checker in self.checkers:
+ checker.run_checks()
def is_path_excluded(self, path):
# type: (str) -> bool
diff --git a/flake8/main/cli.py b/flake8/main/cli.py
index aa4f9a7..0dfd19a 100644
--- a/flake8/main/cli.py
+++ b/flake8/main/cli.py
@@ -254,7 +254,6 @@ class Application(object):
arguments=self.args,
checker_plugins=self.check_plugins,
)
- self.file_checker_manager.make_checkers()
def run(self, argv=None):
# type: (Union[NoneType, List[str]]) -> NoneType
@@ -266,7 +265,9 @@ class Application(object):
self.make_notifier()
self.make_guide()
self.make_file_checker_manager()
+ self.file_checker_manager.start()
self.file_checker_manager.run()
+ self.file_checker_manager.stop()
def main(argv=None):