Example #1
0
class Controller:

    # requestQueue is shared queue among all processes
    def __init__(self, database: DB):
        if not isinstance(database, DB):
            raise TypeError('Controller was not supplied a DB object')
        self.manifest = Manifest()
        self.request_queue = multiprocessing.Queue()
        self.listener = Listener(self.request_queue)
        self.database = database

    def _create_request_processor(self):
        req = RequestProcessor(self.request_queue, self.database)
        req.process_requests()

    def create_request_processors(self):
        processes = []
        for i in range(self.manifest.number_of_request_processors):
            log(f"creating request processor {str(i)}", level=INFO)
            # print('Creating processes %d' % i)
            processes.append(Process(target=self._create_request_processor))
        for i in processes:
            i.start()

    def create_listener(self):
        log('creating request listener', level=INFO)
        self.listener.create_listener()
        thread = Thread(target=self.listener.listen)
        thread.start()
        thread.join()