How to access instance variables from a threaded instance method?

Viewed 51

I have been struggling to figure out how to access the the instance variable from an instance method running in a separate thread like in the example below. I thought the loop would be skipped after the test.set_finished method is called from the main thread after 5 seconds.

However my loop keeps counting and I fail to understand why. Would be nice if someone could help me out a little and tell me what I need to do differently or what I'm trying to do is not possible at all.

import time
import concurrent.futures

class TestClass(object):

    def __init__(self):
        super(TestClass, self).__init__()
        self.finished = False

    def do_something(self):
        i = 0
        while not self.finished:
            i+=1
            print(i)
            time.sleep(1)

    def set_finished(self, finished_arg):
        self.finished = finished_arg

    def startThreadedMethod(self):
        with concurrent.futures.ThreadPoolExecutor() as executor:
            t1 = executor.submit(self.do_something)


test = TestClass()

test.startThreadedMethod()
time.sleep(5)
test.set_finished(True)
0 Answers
Related