RecurrentThread.__LoopFunc_0 (used when interval is None or <= 0) called
self.__loopTarget(*self.__args, **self.__kwargs). Because of name mangling
those resolve to _RecurrentThread__args / _RecurrentThread__kwargs, which
are never set — the constructor stores the loop parameters as __loopArgs
and __loopKwargs. Every iteration raised AttributeError (swallowed by the
bare except), so the target never ran and the thread spun in a hot error
loop. Use __loopArgs / __loopKwargs, matching the timer-based __LoopFunc.
Problem
RecurrentThread.__LoopFunc_0 — the loop body used when interval is None or interval <= 0.0 — reads the wrong attributes:
The constructor stores the loop parameters as self.__loopArgs / self.__loopKwargs:
Because of Python name mangling, self.__args / self.__kwargs inside __LoopFunc_0 resolve to _RecurrentThread__args / _RecurrentThread__kwargs, which are never assigned on RecurrentThread (only the base Thread sets _Thread__args). So every iteration raises AttributeError, which is swallowed by the bare except. The result: the target never runs, and the thread spins in a hot loop printing the same error. The timer-based __LoopFunc (the interval > 0 path) correctly uses self.__loopArgs / self.__loopKwargs.
Reproduce
Fix
Use self.__loopArgs / self.__loopKwargs in __LoopFunc_0, matching __LoopFunc. After the fix the target runs each iteration and args / kwargs are forwarded correctly.