示例#1
0
    def run(self, terminator=None, silent=False):
        def protocol_factory():
            return ServerProtocol(self)

        while True:
            self.keep_running = False
            self.loop = asyncio.ProactorEventLoop()
            self.process_runner = ProcessRunner(self.compile_slots, self.loop)

            # Data shared between sessions.
            self._misc_thread_pool = ThreadPoolExecutor(max_workers=2 * cpu_count())
            self._header_repository = HeaderRepository(self.scratch_dir)
            self._pch_repository = PCHRepository(self.scratch_dir)
            self._compiler_repository = CompilerRepository()
            self._scheduler = sched.scheduler()
            self.server = self.loop.run_until_complete(self.loop.create_server(
                protocol_factory, family=socket.AF_INET, port=self.port))
            if self.port == 0:
                self.port = self.server.sockets[0].getsockname()[1]

            beacon = Beacon(self.compile_slots, self.port)
            beacon.start()

            if not silent:
                print("Running server on 'localhost:{}'.".format(self.port))
                print("Using {} job slots.".format(self.compile_slots))

            try:
                def stop():
                    self.loop.stop()
                if terminator:
                    terminator.initialize(stop)
                self.run_event_loop(silent)
            finally:
                beacon.stop()
                self.server.close()
                self.loop.stop()
                self.loop.close()
                self.misc_thread_pool().shutdown()
                if not self.keep_running:
                    break
示例#2
0
def run_beacon(request):
    beacon = Beacon(request.param[0], request.param[1])
    beacon.start(port=MULTICAST_PORT)
    request.addfinalizer(beacon.stop)
    return request.param[0], request.param[1]