diff options
| author | Ian Cordasco <graffatcolmingov@gmail.com> | 2016-03-14 21:38:56 -0500 |
|---|---|---|
| committer | Ian Cordasco <graffatcolmingov@gmail.com> | 2016-03-14 21:38:56 -0500 |
| commit | 07b9ffbeb9a9e68ce9376f56595ece772ee628cf (patch) | |
| tree | a98285864e36d5b71c7feadb1b2f23dd0e14263c | |
| parent | d222fcb9e118bec3b051355d12da0f6aa9cce163 (diff) | |
| download | flake8-07b9ffbeb9a9e68ce9376f56595ece772ee628cf.tar.gz | |
Add naive multiprocessing support
| -rw-r--r-- | flake8/checker.py | 52 | ||||
| -rw-r--r-- | flake8/main/cli.py | 3 |
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): |
