Stopping a python thread running an Infinite Loop
13,261
I think you missed the 'The thread itself has to check regularly for the stopped() condition' bit of that documentation.
Your thread needs to run like this:
while not self.stopped():
# do stuff
rather than while true
. Note that it is still only going to exit at the 'start' of a loop, when it checks the condition. If whatever is in that loop is long-running, that may cause unexpected delays.
Author by
Ada Xu
Updated on July 23, 2022Comments
-
Ada Xu almost 2 years
I am new to python programming. I am trying to make a GUI with stoppable threads. I borrowed some code from https://stackoverflow.com/a/325528
class MyThread(threading.Thread): """Thread class with a stop() method. The thread itself has to check regularly for the stopped() condition.""" def __init__(self, *args, **kwargs): super(MyThread, self).__init__(*args, **kwargs) self._stop = threading.Event() def stop(self): self._stop.set() def stopped(self): return self._stop.isSet()
I have function which creates a thread for another function in another class that runs an infinite loop.
class MyClass : def clicked_practice(self): self.practicethread = MyThread(target=self.infinite_loop_method) self.practicethread.start() def infinite_loop_method() while True : // Do something #This doesn't seem to work and I am still stuck in the loop def infinite_stop(self) if self.practicethread.isAlive(): self.practicethread.stop()
I want to create a method to stop this thread . What's happening here?