Пример #1
0
 def start():
     """
     Start the Backend service
     """
     state = StateManager(settings.STATE_FILE)
     state.start()
     listner = RequestListner(state.repository)
     listner.start()
Пример #2
0
from database import Database
from state_manager import StateManager
from states import *

import shared
import sys

if __name__ == "__main__":
    # allow database input
    if len(sys.argv) == 1:
        db_file = "db/database.db"
    else:
        db_file = sys.argv[1]

    shared.db = Database(db_file)

    # initialize state manager and insert all used states
    sm = StateManager()
    sm.add_state(LoginState(), "login")
    sm.add_state(PostState(), "post")
    sm.add_state(MenuState(), "menu")
    sm.add_state(QuestionState(), "question")
    sm.add_state(SearchState(), "search")
    sm.add_state(AnswerState(), "answer")
    sm.add_state(EditState(), "edit")

    sm.start("login")
Пример #3
0
class Launcher:
    """
    The initiator of the whole program
    """

    def __init__(self, is_master, remote_ip, gui=None):
        self.is_master = is_master
        self.gui = gui
        self.finished_jobs = []

        if is_master:
            self.vector = [111.1111] * 1024 * 1024 * 32
        else:
            self.vector = None

        self.job_queue = Queue()
        self.work_threads = []

        for i in range(NUM_THREADS):
            self.work_threads.append(WorkerThread(self.job_queue, self, i))

        self.hardware_monitor = HardwareMonitor(self.work_threads)
        self.transfer_manager = TransferManager(self.job_queue, remote_ip, self)
        self.state_manager = StateManager(remote_ip)
        self.adaptor = Adaptor(self.work_threads[0], self.job_queue, self.transfer_manager,
                               self.state_manager, self.hardware_monitor, self.gui)

    def bootstrap(self):
        """
        Define the behavior for bootstrap phase
        """
        if self.is_master:
            self.allocate_jobs()
            self.transfer_jobs()

        self.transfer_manager.receive_job()

        # wait until receiving half of jobs
        while self.job_queue.qsize() != NUM_JOB/2:
            sleep(0.1)

        # receive all jobs and exit the bootstrap stage
        self.hardware_monitor.start()
        self.state_manager.receive_state()
        self.state_manager.start()

        for i in range(NUM_THREADS):
            self.work_threads[i].start()

    def allocate_jobs(self):
        """
        Divide the vector into NUM_JOB jobs, and put jobs into job
        queue
        """
        job_size = len(self.vector) / NUM_JOB
        for i in range(NUM_JOB):
            pos = i * job_size
            job = Job(i, pos, self.vector[pos: pos + job_size])
            self.job_queue.put(job)

    def transfer_jobs(self):
        """
        Send half of jobs to slave node through transfer manager
        """
        self.transfer_manager.send_jobs(NUM_JOB / 2)

    def on_job_finish(self, job):
        """
        Callback function when a job finishes
        :param job: Job Object
        """

        # put the job into finished job if in master node
        # send the job to master node if in slave node
        if self.is_master:
            self.finished_jobs.append(job)
        else:
            self.transfer_manager.send_job(job)

        # inform gui
        if self.gui:
            self.gui.on_job_finish()

        # start to aggregate jobs when all jobs finished
        if len(self.finished_jobs) == NUM_JOB:
            self.aggregate_jobs()
            self.check_data()

    def aggregate_jobs(self):
        """
        Map the data back to vector
        """
        print "Aggregating..."
        for job in self.finished_jobs:
            pos = job.pos
            for data in job.work_data:
                self.vector[pos] = data
                pos += 1

    def print_data(self):
        """
        Print value stored in the vector
        :param vector:
        """
        for i, v in enumerate(self.vector):
            print "A[%d]= %d" % (i, v)

    def check_data(self):
        """
        Print value stored in the vector
        :param vector:
        """
        print "Checking"
        if len(set(self.vector)) == 1:
            print "All elements in the vector are equal"
        else:
            print "There is error in the vector"