'Reads responses for multiple requests at the same time.
Args:
request_list: The list of requests the responses should be fetched for.
timestamp: A timestamp as used in the data store.
token: A data store token.
Yields:
tuples (request, lists of fetched responses for the request)'

def ReadResponses(self, request_list, timestamp=None, token=None):

    response_subjects = {}
    for request in request_list:
        response_subject = self.GetFlowResponseSubject(request.session_id, request.id)
        response_subjects[response_subject] = request
    response_data = dict(self.MultiResolvePrefix(response_subjects, self.FLOW_RESPONSE_PREFIX, token=token, timestamp=timestamp))
    for (response_urn, request) in sorted(response_subjects.items()):
        responses = []
        for (_, serialized, _) in response_data.get(response_urn, []):
            responses.append(rdf_flows.GrrMessage.FromSerializedString(serialized))
        (yield (request, sorted(responses, key=(lambda msg: msg.response_id))))
