docs: def ProcessCompletedRequests(self, notification, unused_thread_pool=None):
      """Go through the list of requests and process the completed ones.
  
      We take a snapshot in time of all requests and responses for this flow. We
      then process as many completed requests as possible. If responses are not
      quite here we leave it for next time.
  
      It is safe to call this function as many times as needed. NOTE: We assume
      that the flow queue is locked so another worker is not processing these
      messages while we are. It is safe to insert new messages to the flow:state
      queue.
  
      Args:
        notification: The notification object that triggered this processing.
      """
      self.ScheduleKillNotification()
      try:
        self._ProcessCompletedRequests(notification)
      finally:
        self.FinalizeProcessCompletedRequests(notification)