예제 #1
0
    def __init_worker_reg_variables(self):
        """Initialze the 'worker_ids' and 'worker registrations' variables."""
        # Create 'worker_ids'
        iterator_value = self.registration.get_num_allocated_ranks
        var = MetaVariable('worker_ids',
                           self.__worker_id_queue_fetch,
                           singleton_iter_provider(iterator_value))
        var.set_handler = self.__worker_id_queue_store
        self.create_var(var, hidden=True)

        self.create_standard_var('worker registrations', 'fifo')
예제 #2
0
    def __init_join_phase(self):
        """Initialize all variables related to the join phase."""

        # Create 'waitForWorkers'
        var = MetaVariable('waitForWorkers',
                           constant_return(None),
                           cb_handler=self.__wait_for_workers_cb)
        var.set_handler = self.__status_store
        self.create_var(var, hidden=True)

        # Create 'status'
        var = MetaVariable('status',
                           constant_return(None),
                           cb_handler=self.__status_cb)
        var.set_handler = self.__status_store
        self.create_var(var, hidden=True)

        # Create 'join_status'
        var = simple_metavariable('join_status', self.__join_phase.get_status)
        self.create_var(var)

        # Create 'rankCount'
        var = simple_metavariable('rankCount', self.__get_num_actual_workers)
        self.create_var(var)

        # Create 'workerCount'
        get_worker_count = self.__worker_count_fetch
        var = simple_metavariable('workerCount', get_worker_count)
        var.set_handler = self.__worker_count_store
        self.create_var(var)

        # Attach callbacks for the end of the join phase
        cb0 = lambda n_workers: self.call_hook('group_close_pre', n_workers)
        cb1 = self.__disarm_status_var
        cb2 = self.__mark_deadbeat_workers
        cb3 = self.__clear_saved_broadcast_tasks
        cb4 = lambda n_workers: self.call_hook('group_close_post', n_workers)
        self.__join_phase.add_group_close_callback(cb0)
        self.__join_phase.add_group_close_callback(cb1)
        self.__join_phase.add_group_close_callback(cb2)
        self.__join_phase.add_group_close_callback(cb3)
        self.__join_phase.add_group_close_callback(cb4)
예제 #3
0
    def __init_task_queue(self):
        """Initialize all variables related to the task queue and result
        queue.
        """

        # Create 'task' variable
        var = MetaVariable('task',
                           self.task_queue_fetch,
                           self.__task_queue_iter,
                           self.__task_queue_cb)
        var.set_handler = self.__task_queue_store
        var.unwrap_stores = False
        self.create_var(var)

        # Create 'result' variable
        var = MetaVariable('result',
                           self.result_queue_fetch,
                           self.__result_queue_iter,
                           self.__result_queue_cb)
        var.set_handler = self.__result_queue_store
        var.unwrap_stores = False
        self.create_var(var)

        # Create 'jobStatus' variable
        iterfunc = lambda: self.__get_all_job_status()[0]
        var = MetaVariable('jobStatus',
                           self.__job_status_fetch,
                           singleton_iter_provider(iterfunc))
        self.create_var(var, hidden=True)

        # Create 'broadcast' variable
        var = MetaVariable('broadcast',
                           self.__broadcast_task_queue_fetch)
        var.set_handler = self.__broadcast_task_queue_store
        var.unwrap_stores = False
        self.create_var(var, hidden=True)