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