mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Improve performance of tracking time changes (#91433)
* Improve performance of async_track_time_interval Uses HassJob internally to avoid looking up the function target type every time it fires * name
This commit is contained in:
parent
19a6530c3c
commit
5ffd833fdf
@ -1425,9 +1425,9 @@ def async_track_time_interval(
|
|||||||
hass.async_run_hass_job(job, now)
|
hass.async_run_hass_job(job, now)
|
||||||
|
|
||||||
if name:
|
if name:
|
||||||
job_name = f"{name}: track time interval {interval}"
|
job_name = f"{name}: track time interval {interval} {action}"
|
||||||
else:
|
else:
|
||||||
job_name = f"track time interval {interval}"
|
job_name = f"track time interval {interval} {action}"
|
||||||
|
|
||||||
interval_listener_job = HassJob(
|
interval_listener_job = HassJob(
|
||||||
interval_listener, job_name, cancel_on_shutdown=cancel_on_shutdown
|
interval_listener, job_name, cancel_on_shutdown=cancel_on_shutdown
|
||||||
@ -1578,23 +1578,30 @@ def async_track_utc_time_change(
|
|||||||
).replace(microsecond=microsecond)
|
).replace(microsecond=microsecond)
|
||||||
|
|
||||||
time_listener: CALLBACK_TYPE | None = None
|
time_listener: CALLBACK_TYPE | None = None
|
||||||
|
pattern_time_change_listener_job: HassJob[[datetime], Any] | None = None
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def pattern_time_change_listener(_: datetime) -> None:
|
def pattern_time_change_listener(_: datetime) -> None:
|
||||||
"""Listen for matching time_changed events."""
|
"""Listen for matching time_changed events."""
|
||||||
nonlocal time_listener
|
nonlocal time_listener
|
||||||
|
nonlocal pattern_time_change_listener_job
|
||||||
|
|
||||||
now = time_tracker_utcnow()
|
now = time_tracker_utcnow()
|
||||||
hass.async_run_hass_job(job, dt_util.as_local(now) if local else now)
|
hass.async_run_hass_job(job, dt_util.as_local(now) if local else now)
|
||||||
|
assert pattern_time_change_listener_job is not None
|
||||||
|
|
||||||
time_listener = async_track_point_in_utc_time(
|
time_listener = async_track_point_in_utc_time(
|
||||||
hass,
|
hass,
|
||||||
pattern_time_change_listener,
|
pattern_time_change_listener_job,
|
||||||
calculate_next(now + timedelta(seconds=1)),
|
calculate_next(now + timedelta(seconds=1)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
pattern_time_change_listener_job = HassJob(
|
||||||
|
pattern_time_change_listener,
|
||||||
|
"time change listener {hour}:{minute}:{second} {action}",
|
||||||
|
)
|
||||||
time_listener = async_track_point_in_utc_time(
|
time_listener = async_track_point_in_utc_time(
|
||||||
hass, pattern_time_change_listener, calculate_next(dt_util.utcnow())
|
hass, pattern_time_change_listener_job, calculate_next(dt_util.utcnow())
|
||||||
)
|
)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
Loading…
x
Reference in New Issue
Block a user