This seems like a particularly confusing question based on the other similar answers I found on SO. I have code similar to the following:
def parentFunction():
    # Other code
    while True:
        var1, var2 = anotherFunction1() # Getting client details after listening on open port
        threading.Thread(target = anotherFunction2, args=(var1, var2)).start()
        childFunction(var1,var2)
        print("PRINT #1: Running in Parent Function") # This only prints once for some reason
def childFunction(var1, var2):
    threading.Timer(10, childFunction, args=(var1,var2)).start()
    print("PRINT #2: Running in child function") # Prints every 10 seconds
    
    # Other code 
    if (someConditionIsMet):
        print("PRINT #3: Exiting") 
        end_process_and_exit_here()
So basically, when I ran the parentFunction(), I would go into a neverending loop where ever 10 seconds, my console would print "PRINT #2: Running in child function". When the someConditionIsMet was true, my console would print "PRINT #3: Exiting" but then it wouldn't exit. Hence, my loop would carry on forever. I am not sure if it's relevant, but parts of the code has a Threading.Lock as well.
Where I have written end_process_and_exit_here() above, I tried using several methods to kill a thread such as
- Raising exceptions and setting flags - These assume that I have started my thread outside of my loop so it's not comparable.
- Even this qn about looping threads assumes the thread isnt being looped
- Killing using join or stop - stop()was not an option I could access.join()was available but it didn't work i.e. after it was called, the next thread (PRINT #2) continued printing.
- Other answers suggesting the use of signals (1) (2), also didn't work.
- Using sys.exit() or break in different parts of my code also did not result in the threads stopping.
Is there any method for me to easily exit from such a looping thread?
Note: I need to use threading and not multiprocessing.
 
    