@@ -142,6 +142,7 @@ def __init__(self, ignore_unknown_events: bool = True):
142142        self ._shutdown  =  False 
143143        self ._silent_events : set [type ] =  set ()
144144        self ._handler_tasks : Dict [uuid .UUID , asyncio .Task [Any ]] =  {}
145+         self ._received_event  =  asyncio .Event ()
145146
146147        self .register (ExceptionEvent )
147148        self .register (HealthCheckEvent )
@@ -213,6 +214,7 @@ def merge(self, em: "EventManager"):
213214        em ._queue  =  self ._queue 
214215        em ._silent_events  =  self ._silent_events 
215216        em ._processing_task  =  None   # Clear the stopped task reference 
217+         em ._received_event  =  self ._received_event 
216218
217219    def  register_events_from_module (
218220        self , module , prefix = "" , ignore_not_compatible = True 
@@ -467,6 +469,8 @@ def send(self, *events):
467469            if  event :
468470                self ._queue .append (event )
469471
472+         self ._received_event .set ()
473+ 
470474    async  def  wait (self , timeout : float  =  10.0 ):
471475        """ 
472476        Wait for all queued events to be processed. 
@@ -486,7 +490,7 @@ async def wait(self, timeout: float = 10.0):
486490    def  _start_processing_task (self ):
487491        """Start the background event processing task.""" 
488492        if  self ._processing_task  and  not  self ._processing_task .done ():
489-             return    # Already running 
493+             return 
490494
491495        loop  =  asyncio .get_running_loop ()
492496        self ._processing_task  =  loop .create_task (self ._process_events_loop ())
@@ -521,13 +525,15 @@ async def _process_events_loop(self):
521525                )
522526                for  task_id  in  cleanup_ids :
523527                    self ._handler_tasks .pop (task_id )
524-                 await  asyncio .sleep (0.0001 )
528+ 
529+                 await  self ._received_event .wait ()
530+                 self ._received_event .clear ()
525531
526532    async  def  _run_handler (self , handler , event ):
527533        try :
528534            return  await  handler (event )
529535        except  Exception  as  exc :
530-             self ._queue . appendleft (ExceptionEvent (exc , handler ))   # type: ignore[arg-type] 
536+             self .send (ExceptionEvent (exc , handler ))
531537            module_name  =  getattr (handler , "__module__" , "unknown" )
532538            logger .exception (
533539                f"Error calling handler { handler .__name__ }   from { module_name }   for event { event .type }  " 
@@ -536,10 +542,9 @@ async def _run_handler(self, handler, event):
536542    async  def  _process_single_event (self , event ):
537543        """Process a single event.""" 
538544        for  handler  in  self ._handlers .get (event .type , []):
539-             # module_name = getattr(handler, '__module__', 'unknown')
545+             module_name  =  getattr (handler , '__module__' , 'unknown' )
540546            if  event .type  not  in   self ._silent_events :
541-                 pass 
542-                 #logger.info(f"Called handler {handler.__name__} from {module_name} for event {event.type}") 
547+                 logger .debug (f"Called handler { handler .__name__ }   from { module_name }   for event { event .type }  " )
543548
544549            loop  =  asyncio .get_running_loop ()
545550            handler_task  =  loop .create_task (self ._run_handler (handler , event ))
0 commit comments