Exemplo n.º 1
0
 def __print_solved_job(self, job: Job, solution: JobSolution):
     logger.user(
         f'Main Node {self.name_} has received the solution to job:\n'
         f'  JOB: {job}\n'
         f' with result:\n'
         f'  SOLUTION: {solution}'
         f'\n')
Exemplo n.º 2
0
    def _process_status(self):
        """Process first job that arrives."""
        try:
            # Wait till there are messages to read
            self.status_reader_.wait_to_data_receive()

            # Check there is data available
            if self.status_reader_.data_available():
                # Read data
                status_data = self.status_reader_.read()

                # Store and Print data
                self.status_history_.append(
                    (datetime.now().strftime("%H:%M:%S"), status_data))
                logger.user(f'\n{self.name_} has read data message:\n' +
                            AmlDdsStatusNode._str_status_data(status_data))

                return True

            else:
                # There is no data and the thread has awake, exit
                return False

        except StopException:
            return False
Exemplo n.º 3
0
def sigint_signal_handler(signum, frame):
    """SIGINT Signal handler."""
    logger.user(f'Signal handler called with signal {signum}.')

    global STOP_

    # Stop application
    CV_STOP_.acquire()
    STOP_ = True
    CV_STOP_.notify_all()
    CV_STOP_.release()
Exemplo n.º 4
0
    def _job_process_callback(self, job: Job):
        """TODO comment."""
        # Sleep to simulate long calculation
        sleep_time = random.randint(self.time_range_ms_[0],
                                    self.time_range_ms_[1]) / 1000
        logger.user(
            f'{self.name_} calculating result for job {job.index} (approximately {sleep_time} ms).'
        )
        time.sleep(sleep_time)

        # Generate solution
        logger.user(f'{self.name_} finish calculating job {job.index}.')

        solution = ComputingNode.__random_solution_generator(job)

        # Storing processed job
        self.jobs_processed_.append((job, solution))

        return solution
Exemplo n.º 5
0
def run_node(node_name,
             node_constructor,
             domain=0,
             seed=666,
             debug_level=logging.USER):
    """TODO comment."""
    # Allow any log level
    logging.basicConfig(level=logging.NOTSET - 10)
    # Only show above this level
    logger.setLevel(debug_level)

    # TODO input args

    # Set random seed
    random.seed(seed)
    logger.info(f'Using random seed {seed}')

    # Create "unique" name
    name = node_name + ' ' + str(random.randint(0, 999)).zfill(3)

    logger.user(f'Starting {name} execution.')

    # Activate signal handler
    signal.signal(signal.SIGINT, sigint_signal_handler)

    # Check result folder exist
    # checkFolders()

    # Create node and run
    main_node = node_constructor(name=name, domain=domain)

    # Run it in a separate thread
    node_thread = Thread(target=main_node.run)
    node_thread.start()

    # Wait to stop
    CV_STOP_.acquire()
    CV_STOP_.wait_for(predicate=lambda: STOP_)
    CV_STOP_.release()

    logger.user(
        f'Signal received, stopping node {name}. This could take few seconds.')

    # Stop node
    main_node.stop()

    # Wait for node to terminate
    node_thread.join()

    logger.user(f'Finishing {name} execution.')
Exemplo n.º 6
0
 def __print_send_job(self, job: Job):
     logger.user(f'Main Node {self.name_} has created a new job:\n'
                 f'  JOB: {job}'
                 f'\n')