@@ -328,7 +328,7 @@ def execute_something():
328328
329329 try :
330330 _check_signature (handler , "handler" , self , * (event_args + args ), ** kwargs )
331- self ._event_handlers [event_name ].append ((handler , (self ,) + args , kwargs ))
331+ self ._event_handlers [event_name ].append ((handler , (weakref . ref ( self ) ,) + args , kwargs ))
332332 except ValueError :
333333 _check_signature (handler , "handler" , * (event_args + args ), ** kwargs )
334334 self ._event_handlers [event_name ].append ((handler , args , kwargs ))
@@ -432,7 +432,15 @@ def _fire_event(self, event_name: Any, *event_args: Any, **event_kwargs: Any) ->
432432 self .last_event_name = event_name
433433 for func , args , kwargs in self ._event_handlers [event_name ]:
434434 kwargs .update (event_kwargs )
435- first , others = ((args [0 ],), args [1 :]) if (args and args [0 ] == self ) else ((), args )
435+ if args and isinstance (args [0 ], weakref .ref ):
436+ resolved_engine = args [0 ]()
437+ if resolved_engine is None :
438+ raise RuntimeError ("Engine reference not resolved. Cannot execute event handler." )
439+ first , others = ((resolved_engine ,), args [1 :])
440+ else :
441+ # metrics do not provide engine when registered
442+ first , others = (tuple (), args ) # type: ignore[assignment]
443+
436444 func (* first , * (event_args + others ), ** kwargs )
437445
438446 def fire_event (self , event_name : Any ) -> None :
0 commit comments