コード例 #1
0
ファイル: client.py プロジェクト: TristHas/debugger
class RemoteClient(object):
    def __init__(self, ip, transmit):
        if not os.path.isdir(DATA_DIR):
            os.makedirs(DATA_DIR)
        # Logging
        self.log = Logger(CLIENT_LOG_FILE, D_VERB)
        self.log.info('[MAIN THREAD] Instantiated client')
        # Central data
        self.receiving = False
        self.training = False
        self.paused = False
        self.define_headers()
        self.targets = {}
        # Workers
        self.data_client = DataClient(transmit, ip)
        # Connection
        self.connect(ip)

    def connect(self, ip):
        self.soc_ctrl = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.soc_ctrl.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        my_ip = socket.gethostbyname('')
        self.log.debug('[MAIN THREAD] connecting...')
        self.soc_ctrl.connect((ip,SOC_PORT_CTRL))
        self.log.info('[MAIN THREAD] Client connected to server')

    def define_headers(self):
        head = {}
        self.headers = head

    def add_target(self, target, name):
        if target in self.targets:
            self.targets[target].append(name)
        else:
            self.targets[target]=[name]

    def remove_target(self, target, name):
       if target in self.targets:
           if name in self.targets[target]:
               self.targets[target].remove(name)
               self.log.info('[MAIN THREAD] Removed {} named {}'.format(target, name))
           else:
               self.log.error('[MAIN THREAD] Asked to remove {} named {} while not recorded'.format(target, name))
       else:
           self.log.error('[MAIN THREAD] Asked to remove {} named {} while not recorded'.format(target, name))

    def start_record(self, target, name):
        self.log.debug('[MAIN THREAD] Asking server to start recording')
        msg = MSG_SEP.join([START_RECORD, target, name])
        answer = send_data(self.soc_ctrl,msg)
        self.log.info('[MAIN THREAD] Server asked to start recording')
        if answer == SYNC:
            self.add_target(target, name)
            self.log.info('[MAIN THREAD] Added {} named {}'.format(target, name))
        else:
            self.log.warn('[MAIN THREAD] Could not add {} named {} because of server answer'.format(target, name))

    def stop_record(self, target, name):
        self.log.debug('[MAIN THREAD] Asking server to stop recording')
        msg = MSG_SEP.join([STOP_RECORD, target, name])
        answer = send_data(self.soc_ctrl,msg)
        self.log.info('[MAIN THREAD] Server asked to stop recording')
        if answer == SYNC:
            self.remove_target(target, name)
        else:
            self.log.warn('[MAIN THREAD] Could not remove {} named {} because of server answer'.format(target, name))

    def start_receive(self):
        if not self.receiving:
            self.receiving = True
            self.log.debug('[MAIN THREAD] Asking server to start sending')
            status = send_data(self.soc_ctrl,START_SEND)
            self.log.info('[MAIN THREAD] Server asked to start sending')
            if status == FAIL:
                self.log.error('[MAIN THREAD] Client tried to receive but server denied it')
            else:
                self.data_client.start()
                self.log.info('[MAIN THREAD] Client is receiving')
            self.log.debug("[MAIN THREAD] DATA THREAD started")
        else:
            self.log.warn("[MAIN THREAD] Asked to start receiving while already receiving")

    def start_training(self):
        if not self.training:
            self.training = True
            self.log.debug('[MAIN THREAD] Asking server to start training')
            status = send_data(self.soc_ctrl,START_TRAIN)
            self.log.info('[MAIN THREAD] Server asked to start training')
            if status == FAIL:
                self.log.error('[MAIN THREAD] Server refused to start training')
            else:
                self.log.info('[MAIN THREAD] Server is training')
        else:
            self.log.warn("[MAIN THREAD] Asked to start training while already training")

    def stop_training(self):
        if self.training:
            self.training = False
            self.log.debug('[MAIN THREAD] Asking server to stop training')
            status = send_data(self.soc_ctrl,STOP_TRAIN)
            self.log.info('[MAIN THREAD] Server asked to stop training')
            if status == FAIL:
                self.log.error('[MAIN THREAD] Server refused to stop training')
            else:
                self.log.info('[MAIN THREAD] Server has stopped training')
        else:
            self.log.warn("[MAIN THREAD] Asked to stop training while not training")

    def pause_training(self):
        if not self.paused:
            self.paused = True
            self.log.debug('[MAIN THREAD] Asking server to pause training')
            status = send_data(self.soc_ctrl,PAUSE_TRAIN)
            self.log.info('[MAIN THREAD] Server asked to pause training')
            if status == FAIL:
                self.log.error('[MAIN THREAD] Server refused to pause training')
            else:
                self.log.info('[MAIN THREAD] Server is paused')
        else:
            self.log.warn("[MAIN THREAD] Asked to paused training while already paused")

    def resume_training(self):
        if self.paused:
            self.paused = False
            self.log.debug('[MAIN THREAD] Asking server to resume training')
            status = send_data(self.soc_ctrl,RESUME_TRAIN)
            self.log.info('[MAIN THREAD] Server asked to resume training')
            if status == FAIL:
                self.log.error('[MAIN THREAD] Server refused to resume training')
            else:
                self.log.info('[MAIN THREAD] Server has resumed training')
        else:
            self.log.warn("[MAIN THREAD] Asked to resume training while not paused")

    def stop_receive(self):
        if self.receiving:
            self.log.debug('[MAIN THREAD] Closing data channel. Exiting data client thread')
            self.data_client.stop()
            self.log.info("[MAIN THREAD] Asked server to stop receiving")
            self.receiving = False
        else:
            self.log.warn("[MAIN THREAD] Asked to stop receiving while already receiving")

    #def start_store(self, dirname = 'easy_client'):
    #    return self.data_processor.start_store(dirname)

    #def stop_store(self):
    #    self.data_processor.stop_store()

    #def start_print(self):
    #    self.data_processor.start_print()

    #def stop_print(self):
    #    self.printing = self.data_processor.stop_print()

    def stop_process(self):
        self.stop_print()
        self.stop_store()
        #self.data_processor.stop()
        self.stop_receive()
        self.soc_ctrl.close()

    def stop_all(self):
        self.stop_process()
        send_data(self.soc_ctrl, STOP_ALL)
コード例 #2
0
ファイル: models.py プロジェクト: TristHas/debugger
class BaseModel(object):
    def __init__(self):
        '''
            DOC
        '''
        self.log = Logger(MODEL_LOG_FILE)
        self.input = T.matrix('x')

    def add_target(self, target = None):
        '''
            DOC
        '''
        if target in self.struct:
            self.struct[target][0] = True
            self.log.info('added target {}'.format(target))
            return True
        else:
            self.log.warn('asked to add target {} which does not exist'.format(target))
            return False

    def remove_target(self, target):
        '''
            DOC
        '''
        if target in self.struct:
            self.struct[target][0] = False
            self.log.info('added target {}'.format(target))
            return True
        else:
            self.log.warn('asked to add target {} which does not exist'.format(target))
            return False

    def drop_weights(self):
        '''
            DOC
        '''
        dico = {}
        for layer in self.struct:
            if self.struct[layer][0] == True:
                self.get_layer_weight(layer, dico)
        return dico

    def get_layer_weight(self, layer, dico):
        '''
            DOC
        '''
        weights = self.struct[layer][1].get_weights()
        dico[layer]=weights

    def get_struct(self):
        '''
            DOC
        '''
        return self.struct

    def load_weights(self, file = None):
        '''
            DOC
        '''
        if file is None:
            return self.standard_weight_init()
        else:
            #TODO Weight loading. How shall we serialize? cPickle a dict?
            return False

    def standard_weight_init(self):
        '''
            DOC
        '''
        return all(self.struct[layer][1].standard_init() for layer in self.struct)