diff options
| author | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2014-11-16 00:09:35 +0200 | 
|---|---|---|
| committer | Claudiu Popa <cpopa@cloudbasesolutions.com> | 2014-11-16 00:09:35 +0200 | 
| commit | 29ea85ac65d3fcd4ba730d2138b216ce8e9ab66c (patch) | |
| tree | 680b4b924869353f3f0c1722b73b1edd7c786cd4 /lint.py | |
| parent | bee85c946dc7a4adf4e1dca6300e768f25f86047 (diff) | |
| download | pylint-git-29ea85ac65d3fcd4ba730d2138b216ce8e9ab66c.tar.gz | |
Simplify a little the code for parallel checking.
Diffstat (limited to 'lint.py')
| -rw-r--r-- | lint.py | 64 | 
1 files changed, 33 insertions, 31 deletions
| @@ -650,24 +650,18 @@ class PyLinter(OptionsManagerMixIn, MessagesHandlerMixIn, ReportsHandlerMixIn,          else:              self._parallel_check(files_or_modules) -    def _parallel_check(self, files_or_modules): -        """Spawn a defined number of subprocesses.""" - -        manager = multiprocessing.Manager()  # pylint: disable=no-member -        tasks_queue = manager.Queue()  # pylint: disable=no-member -        results_queue = manager.Queue()  # pylint: disable=no-member - +    def _parallel_task(self, files_or_modules):          # Prepare configuration for child linters.          config = {}          for opt_providers in six.itervalues(self._all_options):              for optname, optdict, val in opt_providers.options_and_values():                  config[optname] = format_option_value(optdict, val) -        # Reset stats. -        self.open() - -        # Spawn child linters.          childs = [] +        manager = multiprocessing.Manager()  # pylint: disable=no-member +        tasks_queue = manager.Queue()  # pylint: disable=no-member +        results_queue = manager.Queue()  # pylint: disable=no-member +          for _ in range(self.config.jobs):              cl = ChildLinter(args=(tasks_queue, results_queue, config))              cl.start()  # pylint: disable=no-member @@ -679,23 +673,41 @@ class PyLinter(OptionsManagerMixIn, MessagesHandlerMixIn, ReportsHandlerMixIn,          # collect results from child linters          failed = False -        all_stats = [] -        for i in range(len(files_or_modules)): +        for _ in files_or_modules:              try: -                ( -                    file_or_module, -                    self.file_state.base_name, -                    module, -                    messages, -                    stats, -                    msg_status -                ) = results_queue.get() +                result = results_queue.get()              except Exception as ex:                  print("internal error while receiving results from child linter",                        file=sys.stderr)                  print(ex, file=sys.stderr)                  failed = True                  break +            yield result + +        # Stop child linters and wait for their completion. +        for _ in range(self.config.jobs): +            tasks_queue.put('STOP') +        for cl in childs: +            cl.join() + +        if failed: +            print("Error occured, stopping the linter.", file=sys.stderr) +            sys.exit(32) + +    def _parallel_check(self, files_or_modules): +        # Reset stats. +        self.open() + +        all_stats = [] +        for result in self._parallel_task(files_or_modules): +            ( +                file_or_module, +                self.file_state.base_name, +                module, +                messages, +                stats, +                msg_status +            ) = result              if file_or_module == files_or_modules[-1]:                  last_module = module @@ -708,16 +720,6 @@ class PyLinter(OptionsManagerMixIn, MessagesHandlerMixIn, ReportsHandlerMixIn,              all_stats.append(stats)              self.msg_status |= msg_status -        # Stop child linters and wait for their completion. -        for i in range(self.config.jobs): -            tasks_queue.put('STOP') -        for cl in childs: -            cl.join() - -        if failed: -            print("Error occured, stopping the linter.", file=sys.stderr) -            sys.exit(32) -          all_stats.append(self.stats)          all_stats = _merge_stats(all_stats)          self.stats = all_stats | 
