It looks like there's potential for trouble here if `start` is called multiple times for calling `stop`.  The `_thread` object will get replaced with a new one, without a way to stop the old one.

I think the better thing is to ensure you always have exactly one thread object (created in the constructor), and then call `start` on it within the `start` method.  The Python `threading` module will complain if you start the same thread twice, which I think it the desired behavior here, too.