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.

Share:
13,261
Ada Xu
Author by

Ada Xu

Updated on July 23, 2022

Comments

  • Ada Xu
    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?