'Returns a iterator equivalent to map(fn, iter).
Args:
fn: A callable that will take as many arguments as there are
passed iterables.
timeout: The maximum number of seconds to wait. If None, then there
is no limit on the wait time.
Returns:
An iterator equivalent to: map(func, *iterables) but the calls may
be evaluated out-of-order.
Raises:
TimeoutError: If the entire result iterator could not be generated
before the given timeout.
Exception: If fn(*args) raises for any values.'

def map(self, fn, *iterables, **kwargs):

    timeout = kwargs.get('timeout')
    if (timeout is not None):
        end_time = (timeout + time.time())
    fs = [self.submit(fn, *args) for args in zip(*iterables)]
    try:
        for future in fs:
            if (timeout is None):
                (yield future.result())
            else:
                (yield future.result((end_time - time.time())))
    finally:
        for future in fs:
            future.cancel()
