Skip to content

Commit

Permalink
Reduce usage of executer threads in AVM Fritz!Tools (#114570)
Browse files Browse the repository at this point in the history
* call entity state update calls in one executer task

* remove not needed wrapping

* mark as "non-public" method

* add guard against changes on _entity_update_functions
  • Loading branch information
mib1185 authored and balloob committed Apr 2, 2024
1 parent fc24b61 commit 25c611f
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions homeassistant/components/fritz/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,17 @@ def unregister_entity_updates() -> None:
)
return unregister_entity_updates

def _entity_states_update(self) -> dict:
"""Run registered entity update calls."""
entity_states = {}
for key in list(self._entity_update_functions):
if (update_fn := self._entity_update_functions.get(key)) is not None:
_LOGGER.debug("update entity %s", key)
entity_states[key] = update_fn(
self.fritz_status, self.data["entity_states"].get(key)
)
return entity_states

async def _async_update_data(self) -> UpdateCoordinatorDataType:
"""Update FritzboxTools data."""
entity_data: UpdateCoordinatorDataType = {
Expand All @@ -319,15 +330,9 @@ async def _async_update_data(self) -> UpdateCoordinatorDataType:
}
try:
await self.async_scan_devices()
for key in list(self._entity_update_functions):
_LOGGER.debug("update entity %s", key)
entity_data["entity_states"][
key
] = await self.hass.async_add_executor_job(
self._entity_update_functions[key],
self.fritz_status,
self.data["entity_states"].get(key),
)
entity_data["entity_states"] = await self.hass.async_add_executor_job(
self._entity_states_update
)
if self.has_call_deflections:
entity_data[
"call_deflections"
Expand Down

0 comments on commit 25c611f

Please sign in to comment.