def _create_executor(self, handler, args, cpus_per_worker=1):
        """Return a new :class:`.Executor` instance."""
        if self._args.parallel > 0:
            workers = self._args.parallel
        else:
            try:
                workers = mp.cpu_count() // cpus_per_worker
            except NotImplementedError:
                workers = 1

        if workers != 1:
            logger.info('Using {} parallel worker processes...'.format(
                workers))
            executor = ProcessPoolExecutor(
                processes=workers, handler_init=handler, handler_args=args)
        else:
            logger.info('Using single worker...')
            executor = SequentialExecutor(
                handler_init=handler, handler_args=args)

        return executor