code: async def call_async(self, method_name: str, *args, rpc_timeout: float = None, **kwargs):
          
          # if an rpc_timeout override is not specified, use the one set in the Client attributes
          if rpc_timeout is None:
              rpc_timeout = self.rpc_timeout
  
          if rpc_timeout:
              # Implementation note: this simply wraps the call in a timeout and converts to the built-in TimeoutError
              try:
                  return await asyncio.wait_for(self._call_async(method_name, *args, **kwargs), timeout=rpc_timeout)
              except asyncio.TimeoutError:
                  raise TimeoutError(f"Timeout on client {self.endpoint}, method name {method_name}, class info: {self}")
          else:
              return await self._call_async(method_name, *args, **kwargs)
docs: Send JSON RPC request to a backend socket and receive reply (asynchronously)
  
          :param method_name: Method name
          :param args: Args that will be passed to the remote function
          :param float rpc_timeout: Timeout in seconds for Server response, set to None to disable the timeout
          :param kwargs: Keyword args that will be passed to the remote function