import threading import time exitFlag = 0 incrementme = 0 class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self, name=name) self.threadID = threadID #self.name = name self.counter = counter def run(self): print("Starting " + self.name + " at: " + time.ctime(time.time())) print_time(self.name, self.counter, 1) # delay fixed to 1 second for simplicity print("Exiting " + self.name) def print_time(threadName, counter, delay): global incrementme while counter: if exitFlag: threadName.exit() time.sleep(delay) print("%s: %s" % (threadName, time.ctime(time.time()))) counter -= 1 incrementme = incrementme + 1 # Create new threads thread1 = myThread(1, "Thread-One", 5) thread2 = myThread(2, "Thread-Two", 10) # Start new Threads thread1.start() thread2.start() thread1.join() # .join() will wait for thread to finish, otherwise script will race till the end and result will be 0 thread2.join() print(f"result is: {incrementme}") print("End of Program. Exiting Main Thread")