def METHOD_NAME(self, timeout=0):
    start_time = time.time()
    port_dict = {}
    forever = False
    if timeout == 0:
        forever = True
    elif timeout > 0:
        timeout = timeout / float(1000) # Convert to secs
    else:
        print("get_transceiver_change_event:Invalid timeout value", timeout)
        return False, {}
    end_time = start_time + timeout
    if start_time > end_time:
        print('get_transceiver_change_event:' \
                   'time wrap / invalid timeout value', timeout)
        return False, {} # Time wrap or possibly incorrect timeout
    while timeout >= 0:
        change_status = False
        cur_presence = self._get_sfp_presence()
        for port in range(0, self.port_end+1):
            if cur_presence[port] == 1:
                port_dict[port]='1'
            else:
                port_dict[port]='0'
            if cur_presence[port] != self._transceiver_presence[port]:
                change_status = True
        self._transceiver_presence = cur_presence
        if change_status:
            return True, port_dict
        if forever:
            time.sleep(1)
        else:
            timeout = end_time - time.time()
            if timeout >= 1:
                time.sleep(1) # We poll at 1 second granularity
            else:
                if timeout > 0:
                    time.sleep(timeout)
                return True, {}
    print("get_evt_change_event: Should not reach here.")
    return False, {}