code: def subscribe(self, path, callback, *args):
          
          request = Subscribe(self._get_next_id(), path, delta=False)
          request.set_callback(self._q.put)
          # If self is in args, then make weak version of it
          saved_args = []
          for arg in args:
              if arg is self:
                  saved_args.append(weakref.proxy(self))
              else:
                  saved_args.append(arg)
          self._subscriptions[request.id] = (callback, saved_args)
          future = self._dispatch_request(request)
          return future
docs: Subscribe to changes in a given attribute and call
          ``callback(future, value, *args)`` when it changes
  
          Returns:
              Future: A single Future which will resolve to the result