'Stop running threads and wait for them to exit, if necessary.
Should be called by the same thread which called start().
# Arguments
timeout: maximum time to wait on thread.join()'

@abstractmethod
def stop(self, timeout=None):

    raise NotImplementedError
