示例#1
0
    def __init__(self,
                 scheduler,
                 storage,
                 cache=None,
                 pool_size=None,
                 debug=True):
        """
    :param scheduler: The local scheduler for creating execution graphs.
    :type scheduler: :class:`pants.engine.exp.scheduler.LocalScheduler`
    :param storage: The storage instance for serializables keyed by their hashes.
    :type storage: :class:`pants.engine.exp.storage.Storage`
    :param cache: The cache instance for storing execution results, by default it uses the same
      Storage instance if not specified.
    :type cache: :class:`pants.engine.exp.storage.Cache`
    :param int pool_size: The number of worker processes to use; by default 2 processes per core will
                          be used.
    :param bool debug: `True` to turn on pickling error debug mode (slower); True by default.
    """
        super(LocalMultiprocessEngine, self).__init__(scheduler, storage,
                                                      cache)
        self._pool_size = pool_size if pool_size and pool_size > 0 else 2 * multiprocessing.cpu_count(
        )

        execute_step = functools.partial(_execute_step, self._maybe_cache_put,
                                         debug)
        node_builder = scheduler.node_builder()
        process_initializer = functools.partial(_process_initializer,
                                                node_builder, self._storage)
        self._pool = StatefulPool(self._pool_size, process_initializer,
                                  execute_step)
        self._debug = debug