class_docstr: Wrapper for remote class in client side.
  1. request cpu resource and submit job to the master
  2. return the result of the function called by the user, using the remote computation resource.
code: def set_remote_attr(self, attr, value):
      self.internal_lock.acquire()
      self.job_socket.send_multipart(
          [
              remote_constants.SET_ATTRIBUTE_TAG,
              to_byte(attr),
              dumps_return(value),
          ]
      )
      message = self._receive_from_remote_instance(attr)
      tag = message[0]
      if tag == remote_constants.NORMAL_TAG:
          self.remote_attribute_keys_set = loads_return(message[1])
          self.internal_lock.release()
      else:
          self.job_is_alive.value = False
          raise NotImplementedError()
      return
  
imports: import cloudpickle
  import sys
  import threading
  import zmq
  import multiprocessing
  from parl.utils import logger, to_str, to_byte
  from parl.remote.communication import loads_argument, loads_return, dumps_argument, dumps_return
  from parl.remote.client import get_global_client
  from parl.remote import remote_constants
  from parl.remote.exceptions import RemoteError, RemoteAttributeError, RemoteDeserializeError, RemoteSerializeError, ResourceError, FutureFunctionError
  from parl.remote.remote_class_serialization import dump_remote_class
label_desc: Use image node_id 7 for calling the RemoteWrapper obj's underlying member method code with example usage: obj.set_remote_attr(attr, value) without return types