docs: def mapReduce(mapFunc, reductionFunc, *iterables, **kwargs):
      """Exectues the :meth:`~scoop.futures.map` function and then applies a
      reduction function to its result. The reduction function will cumulatively
      merge the results of the map function in order to get a single final value.
      This call is blocking.
  
      :param mapFunc: Any picklable callable object (function or class object
          with *__call__* method); this object will be called to execute the
          Futures. The callable must return a value.
      :param reductionFunc: Any picklable callable object (function or class
          object with *__call__* method); this object will be called to reduce
          pairs of Futures results. The callable must support two parameters and
          return a single value.
      :param iterables: Iterable objects; each will be zipped to form an iterable
          of arguments tuples that will be passed to the callable object as a
          separate Future.
      :param timeout: The maximum number of seconds to wait. If None, then there
          is no limit on the wait time.
  
      :returns: A single value."""
      return submit(
          _recursiveReduce,
          mapFunc,
          reductionFunc,
          False,
          *iterables
      ).result()