Package: timer-event
Timer Event PackageThis package provides two classes for working with events:1. EventThread:A class for creating and managing events with callback routines.This class can be used independently of TimerEvent for handling general event-driven scenarios without any time-based requirements.2.  TimerEvent:A class that extends EventThread to create timer-based events.This class is specifically designed for scenarios where events are triggered after a certain period of time or at specific intervals.Note:Since this class extends the EventThread class it uses most all methods defined and documented in EvenThread class.EventThread:The EventThread class creates an event that can be subscribed to and triggered with a payload. The class uses its own thread to broadcast events to subscribers.  The callback function is called when the event is triggered with a payload.The packet dictionary is passed to the callback.The packet dictionary includes:All parameters passed in during instantiation of the EventThread.Minimum items included: .."event" =   The event name"dest"  =   The subscriber name provided when subscribing"payload" = The object included in the post"cookie" =  The cookie if included when subscribing, otherwise NoneThe EventThread class has the following methods::subscribe(name: str, on_event: callable): Subscribes to the event with a callback function.
unsubscribe(name: str): Unsubscribes from the event.
post(payload, **kwargs): Posts an event with a payload to the subscribers.
pause(): Pauses broadcasting events
unpause(): Unpauses the event to continue broadcasting events
stop(): Stops the event processing thread, clears the subscribers list.
        Note:   This can not be used as pause.  Once the EventThread instance is stopped it can not be restarted.
                A new instance must be created after calling stop to continue eventing, but the subscribers list will be lost.TimerEvent:The TimerEvent class creates a timed event that triggers at a specified interval. The class uses a Timer object to initiate the timed event. The TimerEvent class can be subscribed to using the subscribe method, which takes a name and a callback function as arguments. The callback function is executed when the timed event is triggered.The  TimerEvent class has the following methods::subscribe(name: str, on_event: callable): Subscribes to the timed event with a callback function.
unsubscribe(name: str): Unsubscribes from the timed event.
stop(): Stops the timed event.Example Usage::from timer_event import TimerEvent, EventThread
import time

 # Create a TimerEvent that triggers every 5 seconds
te = TimerEvent(interval=5.0)

# Subscribe to the TimerEvent
def te_on_event(packet):
    print("TimerEvent triggered")

te.subscribe(name="test_subscriber", on_event=te_on_event)

# Start the TimerEvent
te.start()

# Create an Event
event = EventThread("test_event")

# Subscribe to the Event
def ev_on_event(payload):
    print(f"Event triggered with payload: {payload}")

event.subscribe(name="test_subscriber", on_event=ev_on_event)

# Post an event with a payload
event.post("test_payload")

# Sleep to allow for timer events
time.sleep(10)

# Stop the TimerEvent and Event
te.stop()
event.stop()