From: Marcel van der Veldt Date: Sun, 21 Jul 2024 23:02:44 +0000 (+0200) Subject: improve poll logic X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=8df94e9150540fff4af329f8e346549cb777a1c8;p=music-assistant-server.git improve poll logic --- diff --git a/music_assistant/common/models/player.py b/music_assistant/common/models/player.py index 71610683..5ee0e07c 100644 --- a/music_assistant/common/models/player.py +++ b/music_assistant/common/models/player.py @@ -131,6 +131,9 @@ class Player(DataClassDictMixin): # announcement_in_progress boolean to indicate there's an announcement in progress. announcement_in_progress: bool = False + # last_poll: when was the player last polled (used with needs_poll) + last_poll: float = 0 + @property def corrected_elapsed_time(self) -> float: """Return the corrected/realtime elapsed time.""" diff --git a/music_assistant/server/controllers/players.py b/music_assistant/server/controllers/players.py index 3d46f171..c9beeafa 100644 --- a/music_assistant/server/controllers/players.py +++ b/music_assistant/server/controllers/players.py @@ -1014,9 +1014,7 @@ class PlayerController(CoreController): async def _poll_players(self) -> None: """Background task that polls players for updates.""" - count = 0 while True: - count += 1 for player in list(self._players.values()): player_id = player.player_id # if the player is playing, update elapsed time every tick @@ -1029,9 +1027,10 @@ class PlayerController(CoreController): # Poll player; if not player.needs_poll: continue - if count % player.poll_interval == 0 and ( - player_prov := self.get_player_provider(player_id) - ): + if (self.mass.loop.time() - player.last_poll) < player.poll_interval: + continue + player.last_poll = self.mass.loop.time() + if player_prov := self.get_player_provider(player_id): try: await player_prov.poll_player(player_id) except PlayerUnavailableError: @@ -1048,8 +1047,6 @@ class PlayerController(CoreController): finally: # always update player state self.mass.loop.call_soon(self.update, player_id) - if count >= 120: - count = 0 await asyncio.sleep(1) # Syncgroup specific functions/helpers