Threads creation optimization

This commit is contained in:
Eden Kirin
2023-03-30 21:13:54 +02:00
parent 059408242c
commit c9707c0523
5 changed files with 17 additions and 14 deletions

View File

@ -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)

View File

@ -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)

View File

@ -60,7 +60,6 @@ class GameEngine:
self._inacivity_watchdog = InactivityWatchdog(
players=self.players,
ws_server=self.ws_server,
daemon=True,
)
self._inacivity_watchdog.start()

View File

@ -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")

View File

@ -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