From c9707c05233a3d3412eb798a0e1f81d7fd0e66bf Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Thu, 30 Mar 2023 21:13:54 +0200 Subject: [PATCH] Threads creation optimization --- hopper/api/dependencies.py | 6 +++++- hopper/countdown_timer.py | 4 ++-- hopper/engine.py | 1 - hopper/watchdog.py | 8 ++------ hopper/ws_server.py | 12 ++++++++---- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/hopper/api/dependencies.py b/hopper/api/dependencies.py index 52dbd3a..d104e37 100644 --- a/hopper/api/dependencies.py +++ b/hopper/api/dependencies.py @@ -2,6 +2,7 @@ from typing import Optional from hopper.engine import GameEngine, GameEngineFactory from hopper.ws_server import WSServer +from settings import settings game_engine: Optional[GameEngine] = None @@ -12,7 +13,10 @@ def create_game_engine() -> GameEngine: if game_engine: raise RuntimeError("Can't call create_game_engine() more than once!") - ws_server = WSServer(daemon=True) + ws_server = WSServer( + host=settings.ws_server.HOST, + port=settings.ws_server.PORT, + ) ws_server.start() game_engine = GameEngineFactory.create_default(ws_server=ws_server) diff --git a/hopper/countdown_timer.py b/hopper/countdown_timer.py index c7786c0..8fd01c5 100644 --- a/hopper/countdown_timer.py +++ b/hopper/countdown_timer.py @@ -10,11 +10,11 @@ class CountdownTimer(Thread): self.seconds = seconds self.stop_event = Event() self.callback = callback - super().__init__() + super().__init__(daemon=True) def run(self) -> None: cnt = self.seconds - while cnt > 0 and not self.stop_event.is_set(): + while cnt and not self.stop_event.is_set(): cnt -= 1 time.sleep(1) diff --git a/hopper/engine.py b/hopper/engine.py index 5fdb512..59c9806 100644 --- a/hopper/engine.py +++ b/hopper/engine.py @@ -60,7 +60,6 @@ class GameEngine: self._inacivity_watchdog = InactivityWatchdog( players=self.players, ws_server=self.ws_server, - daemon=True, ) self._inacivity_watchdog.start() diff --git a/hopper/watchdog.py b/hopper/watchdog.py index bf5b809..99399d3 100644 --- a/hopper/watchdog.py +++ b/hopper/watchdog.py @@ -12,16 +12,12 @@ from settings import settings class InactivityWatchdog(Thread): def __init__( - self, - players: PlayerList, - ws_server: Optional[SendGameDumpInterface] = None, - *args, - **kwargs, + self, players: PlayerList, ws_server: Optional[SendGameDumpInterface] = None ) -> None: self.players = players self.ws_server = ws_server self.stopped = False - super().__init__(*args, **kwargs) + super().__init__(daemon=True) def run(self) -> None: logging.info("Starting inactivity watchdog") diff --git a/hopper/ws_server.py b/hopper/ws_server.py index 349361e..e5d457c 100644 --- a/hopper/ws_server.py +++ b/hopper/ws_server.py @@ -17,10 +17,14 @@ from hopper.models.ws_dto import ( WSProductPurchaseDone, WSProductPurchaseStart, ) -from settings import settings class WSServer(Thread): + def __init__(self, host: str, port: int) -> None: + self.host = host + self.port = port + super().__init__(daemon=True) + async def handler(self, websocket: WebSocketServerProtocol) -> None: """New handler instance spawns for each connected client""" self.connected_clients.add(websocket) @@ -95,13 +99,13 @@ class WSServer(Thread): async def run_async(self) -> None: logging.info( - f"Starting FairHopper Websockets Server on {settings.ws_server.HOST}:{settings.ws_server.PORT}" + f"Starting FairHopper Websockets Server on {self.host}:{self.port}" ) async with websockets.serve( ws_handler=self.handler, - host=settings.ws_server.HOST, - port=settings.ws_server.PORT, + host=self.host, + port=self.port, ): await asyncio.Future() # run forever