mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
One time listener ensures it is executed one time
This commit is contained in:
parent
4ab362531f
commit
0e97e64397
@ -327,16 +327,21 @@ class Bus(object):
|
|||||||
as event_type.
|
as event_type.
|
||||||
|
|
||||||
Note: at the moment it is impossible to remove a one time listener.
|
Note: at the moment it is impossible to remove a one time listener.
|
||||||
Note2: it is also not guaranteed that it will only run once
|
|
||||||
"""
|
"""
|
||||||
|
@ft.wraps(listener)
|
||||||
def onetime_listener(event):
|
def onetime_listener(event):
|
||||||
""" Removes listener from eventbus and then fires listener. """
|
""" Removes listener from eventbus and then fires listener. """
|
||||||
self.remove_event_listener(event_type, onetime_listener)
|
if not hasattr(onetime_listener, 'run'):
|
||||||
|
# Set variable so that we will never run twice.
|
||||||
|
# Because the event bus might have to wait till a thread comes
|
||||||
|
# available to execute this listener it might occur that the
|
||||||
|
# listener gets lined up twice to be executed.
|
||||||
|
# This will make sure the second time it does nothing.
|
||||||
|
onetime_listener.run = True
|
||||||
|
|
||||||
listener(event)
|
self.remove_event_listener(event_type, onetime_listener)
|
||||||
|
|
||||||
onetime_listener.__name__ = "One time listener for {}".format(
|
listener(event)
|
||||||
listener.__name__)
|
|
||||||
|
|
||||||
self.listen_event(event_type, onetime_listener)
|
self.listen_event(event_type, onetime_listener)
|
||||||
|
|
||||||
@ -363,16 +368,16 @@ class Bus(object):
|
|||||||
|
|
||||||
self.last_busy_notice = dt.datetime.now()
|
self.last_busy_notice = dt.datetime.now()
|
||||||
|
|
||||||
logger = self.logger
|
log_error = self.logger.error
|
||||||
|
|
||||||
logger.error(
|
log_error(
|
||||||
"Bus:All {} threads are busy and {} jobs pending".format(
|
"Bus:All {} threads are busy and {} jobs pending".format(
|
||||||
self.thread_count, self.pool.queue.qsize()))
|
self.thread_count, self.pool.queue.qsize()))
|
||||||
|
|
||||||
jobs = self.pool.current_jobs
|
jobs = self.pool.current_jobs
|
||||||
|
|
||||||
for start, job in jobs:
|
for start, job in jobs:
|
||||||
logger.error("Bus:Current job from {}: {}".format(
|
log_error("Bus:Current job from {}: {}".format(
|
||||||
util.datetime_to_str(start), job))
|
util.datetime_to_str(start), job))
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user