code: def __send_retry_requests(self, last_send_failure_time):
          
          # make sure multiple failures having set multiple times do not run concurrently
          with self.__send_retry_requests_lock:
              with self.__requests:
                  # produce list instead of generator as requests mapping can change during subsequent loop
                  retry_reqs = [req for req in self.__requests.values()
                                if req._sent_without_response(last_send_failure_time)]
  
              retry_req_count = 0
              # don't continue if another network failure has occured (which will trigger this function again)
              while retry_reqs and self.__amqplink.last_send_exc_time <= last_send_failure_time:
                  req = retry_reqs.pop()
                  # lock individuallly so incoming request handling does not 'pause' for too long
                  with self.__requests:
                      # might have received a response (or finished since)
                      if not (req.id_ in self.__requests and req._sent_without_response(last_send_failure_time)):
                          logger.debug('Not resending request %s (finished or has received response)', req.id_)
                          continue
                  logger.debug('Resending request %s', req.id_)
                  if not self.__retry_enqueue(PreparedMessage(req._inner_msg_out, req.id_)):
                      # client shutdown
                      break
                  retry_req_count += 1
  
          if retry_req_count:
              logger.debug('Resending of %d request(s) complete (before %s)', retry_req_count, last_send_failure_time)
docs: Called via Timer from __send_ready to resend requests which might not have been sent due to transport
             failure. This can happen since the current transport implementation does not received acknowledgements
             for sent messages.