code: def pool_boy(Pool, traces, **kwargs):
      
      # All parallel processing happens on a per-trace basis, we shouldn't create
      # more workers than there are traces
      n_cores = kwargs.get('cores', cpu_count())
      if n_cores is None:
          n_cores = cpu_count()
      if n_cores > traces:
          n_cores = traces
      pool = Pool(n_cores)
      yield pool
      pool.close()
      pool.join()
docs: A context manager for handling the setup and cleanup of a pool object.
  
      :param Pool: any Class (not instance) that implements the multiprocessing
          Pool interface
      :param traces: The number of traces to process
      :type traces: int