':param fname_iter: An iterator that yields all the file names to read.
:param error_handler: A function which creates a wrapper around the
function that it takes as parameter, returning
the same tuple as the read_multi function.
:yield: Tuple:
- The name of the file which was read
- The contents of the file'

def read_multi(self, fname_iter, error_handler=None):

    if (error_handler is None):
        read_file = return_args(self.shell.read)
    else:
        read_file = return_args(error_handler(self.shell.read))
    results = self.worker_pool.imap_unordered(read_file, fname_iter)
    for ((file_name,), content) in results:
        (yield (file_name, content))
