Beispiel #1
0
class RulesService(MessagingEnabled, BasePlugin):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.exited = Event()

    def on_service_start(self, *args, **kwargs):
        self.notify_start()
        self.exited.wait()

    def on_service_stop(self, *args, **kwargs):
        self.exited.stop()
Beispiel #2
0
def after(delay, action, *args):
    """
    Execute an action after a given number of seconds.

    This function is executed in a separate thread.

    Parameters
    ----------
    delay : float
        Number of seconds to delay the action.
    action
        To be taken after the interval.
    args : tuple, default is ()
        Arguments for the action.

    Returns
    -------
    Event
        A timer object that can be terminated using the `stop()` method.
    """
    event = Event()

    def wait():
        if event.wait(delay):
            return
        action(*args)

    Thread(target=wait).start()
    event.stop = event.set

    return event
Beispiel #3
0
def after(delay, action, *args):
    """
    Execute an action after a given number of seconds.

    This function is executed in a separate thread.

    Parameters
    ----------
    delay : float
        Number of seconds to delay the action.
    action
        To be taken after the interval.
    args : tuple, default is ()
        Arguments for the action.

    Returns
    -------
    Event
        A timer object that can be terminated using the `stop()` method.
    """
    event = Event()

    def wait():
        if event.wait(delay):
            return
        action(*args)

    Thread(target=wait).start()
    event.stop = event.set

    return event
Beispiel #4
0
def repeat(interval, action, *args):
    """
    Repeat an action forever after a given number of seconds.

    If a sequence of events takes longer to run than the time available
    before the next event, the repeater will simply fall behind.

    This function is executed in a separate thread.

    Parameters
    ----------
    interval : float
        Number of seconds between executions.
    action
        To be taken after the interval.
    args : tuple, default is ()
        Arguments for the action.

    Returns
    -------
    Event
        A timer object that can be terminated using the `stop()` method.
    """
    event = Event()

    def loop():
        starttime = time.time()
        while True:
            nexttime = starttime + interval
            action(*args)
            after_action = time.time()
            if event.wait(nexttime - after_action):
                break
            starttime = max(after_action, nexttime)

    Thread(target=loop).start()
    event.stop = event.set

    return event
Beispiel #5
0
def repeat(interval, action, *args):
    """
    Repeat an action forever after a given number of seconds.

    If a sequence of events takes longer to run than the time available
    before the next event, the repeater will simply fall behind.

    This function is executed in a separate thread.

    Parameters
    ----------
    interval : float
        Number of seconds between executions.
    action
        To be taken after the interval.
    args : tuple, default is ()
        Arguments for the action.

    Returns
    -------
    Event
        A timer object that can be terminated using the `stop()` method.
    """
    event = Event()

    def loop():
        starttime = time.time()
        while True:
            nexttime = starttime + interval
            action(*args)
            after_action = time.time()
            if event.wait(nexttime - after_action):
                break
            starttime = max(after_action, nexttime)

    Thread(target=loop).start()
    event.stop = event.set

    return event