code: def future_request(self, msg, timeout=None, use_mid=None):
          
          if timeout is None:
              timeout = self._request_timeout
  
          f = tornado_Future()
          informs = []
  
          def reply_cb(msg):
              f.set_result((msg, informs))
  
          def inform_cb(msg):
              informs.append(msg)
  
          try:
              self.callback_request(msg, reply_cb=reply_cb, inform_cb=inform_cb,
                                    timeout=timeout, use_mid=use_mid)
          except Exception:
              f.set_exc_info(sys.exc_info())
          return f
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.