'Verfires hunts output generated by respective plugins.
MultiVerifyHuntOutput is similar to VerifyHuntOutput except that it may be
optimized for verifying multiple hunts at the same time. Default
implementation just applies VerifyHuntOutput iteratively.
Args:
plugins_hunts_pairs: A list of (plugin, hunt) tuples where "plugin"
is an OutputPlugin object instance corresponding to a plugin
that was used to process hunt results, and "hunt" is a GRRHunt
object.
Yields:
(RDFURN, OutputPluginVerificationResult) pairs, where urns
correspond to hunts that were verified.
Raises:
MultiVerifyHuntOutputError: if an error was encountered while verifying
any of the hunts. Note that the error will be thrown only after all the
verification results are produced.'

def MultiVerifyHuntOutput(self, plugins_hunts_pairs):

    errors = []
    for (plugin, hunt) in plugins_hunts_pairs:
        try:
            (yield (hunt.urn, self.VerifyHuntOutput(plugin, hunt)))
        except Exception as e:
            logging.exception(e)
            errors.append((hunt.urn, e))
    if errors:
        error_messages = [('Error    validating    hunt    %s:    %s' % (hunt_urn, e)) for (hunt_urn, e) in errors]
        raise MultiVerifyHuntOutputError('\n'.join(error_messages), errors=[e for (_, e) in errors])
