code: def _handle_timeout(self, msg_id, start_time):
          
          msg, reply_cb, inform_cb, user_data, timeout_handle = \
              self._pop_async_request(msg_id, None)
          # We may have been racing with the actual reply handler if the reply
          # arrived close to the timeout expiry,
          # which means the self._pop_async_request() call gave us None's.
          # In this case, just bail.
          #
          # NM 2014-09-17 Not sure if this is true after porting to tornado,
          # but I'm too afraid to remove this code :-/
          if timeout_handle is None:
              return
  
          reason = "Request {0.name} timed out after {1:f} seconds.".format(
              msg, self.ioloop.time() - start_time)
          self._do_fail_callback(
              reason, msg, reply_cb, inform_cb, user_data, timeout_handle)
docs: Handle a timed-out callback request.
  
          Parameters
          ----------
          msg_id : uuid.UUID for message
              The name of the reply which was expected.