I am stuck on writing a very simple kivy gui with 2 buttons. button_1 launches the countdown in multiprocessing. It works. button_2 is supposed to end the countdown in multiprocessing. That does not work... Can anyone please point out what I am doing wrong and why?
Thank you kindly in advance.
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
import multiprocessing
import time
class MyApp(App):
    list_of_objects_in_class = []
    def build(self):
        layout = BoxLayout()
        button_1 = Button(text='launch_countdown', on_press=self.launch_countdown)
        button_2 = Button(text='end_the_countdown', on_press=self.end_the_countdown)
        layout.add_widget(button_1)
        layout.add_widget(button_2)
        return layout
    
    @staticmethod
    def actual_countdown_function(*args):
        print('I am launching the countdown!')
        for count in range(5, 0, -1):
            print(count)
            time.sleep(1)
        print('Countdown Finished!!!') # When I press end_the_countdown button, this is NOT supposed to be printed.
    def launch_countdown(self, *args):
        MyApp.list_of_objects_in_class.append(multiprocessing.Process(target=MyApp.actual_countdown_function, args=()))
        MyApp.list_of_objects_in_class[0].start()
    
    def end_the_countdown(self, *args):
        print('I am terminating the countdown early!')
        try:
            MyApp.list_of_objects_in_class[0].terminate()
            MyApp.list_of_objects_in_class.clear()
        except:
            pass 
if __name__ == "__main__":
    MyApp().run()
I tested to see if .terminate() works on my system, it works. The script below terminates successfully but the script above does NOT...
import multiprocessing
import time 
def print_one():
    time.sleep(3)
    print('This does NOT get printed because proc.terminate() works on my Linux Mint OS')
def print_two():
    print('This gets printed')
process_to_terminate = multiprocessing.Process(target=print_one, args=())
process_to_terminate.start()
process_to_keep_and_NOT_terminate = multiprocessing.Process(target=print_two, args=())
process_to_keep_and_NOT_terminate.start()
process_to_terminate.terminate()  # Works and kills print_one function
 
    