code: def future_request(self, msg, timeout=None, use_mid=None):
          
          mid = self._get_mid_and_update_msg(msg, use_mid)
  
          if msg.name in self.request_handlers:
              req = FakeClientRequestConnection(self.client_connection, msg)
              reply_msg = yield tornado.gen.maybe_future(
                  self.request_handlers[msg.name](req, msg))
              reply_informs = req.informs_sent
          else:
              reply_msg = Message.reply(msg.name, 'ok')
              reply_informs = []
  
          reply_msg.mid = mid
          raise Return((reply_msg, reply_informs))
docs: Send a request messsage, with future replies.
  
          Parameters
          ----------
          msg : Message object
              The request Message to send.
          timeout : float in seconds
              How long to wait for a reply. The default is the
              the timeout set when creating the AsyncClient.
          use_mid : boolean, optional
              Whether to use message IDs. Default is to use message IDs
              if the server supports them.
  
          Returns
          -------
          A tornado.concurrent.Future that resolves with:
  
          reply : Message object
              The reply message received.
          informs : list of Message objects
              A list of the inform messages received.