<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set(self, obj, id, payload, action='', async=False):
 """ Function set Set an object by id @param id: the id of the object (name or id) @param payload: the dict of the payload @param async: should this request be async, if true use return.result() to get the response @return RETURN: the server response """

        self.url = '{}{}/{}'.format(self.base_url, obj, id)
        self.method = 'PUT'
        if action:
            self.url += '/{}'.format(action)
        self.payload = json.dumps(payload)
        if async:
            session = FuturesSession()
            return session.put(url=self.url, auth=self.auth,
                               headers=self.headers, data=self.payload,
                               cert=self.ca_cert)
        else:
            self.resp = requests.put(url=self.url, auth=self.auth,
                                     headers=self.headers, data=self.payload,
                                     cert=self.ca_cert)
            if self.__process_resp__(obj):
                return self.res
            return False