In Python, Thread(daemon=True) is stopped abruptly at interpreter exit, so its finally blocks and cleanup may never run. Use an Event to stop worker threads politely instead.