从子线程终止主线程

时间:2021-09-11 20:42:42

I have a GUI thread and Main thread. After closing a window I have method called inside the GUI thread. I would like to propagate this to Main thread to end its work. Main thread is doing several steps, so I am able to set stop_event, but I do not want to check after each line of code for Main thread if stop_event is set.

我有一个GUI线程和主线程。关闭窗口后,我在GUI线程中调用了一个方法。我想将此传播到主线程以结束其工作。主线程正在执行几个步骤,因此我可以设置stop_event,但是如果设置了stop_event,我不想在主线程的每行代码后检查。

Thank you for your advices.

谢谢你的建议。

1 个解决方案

#1


0  

If your purpose is just to terminate main thread from the child thread, try the below.

如果您的目的只是从子线程终止主线程,请尝试以下操作。

import threading
import signal
import time
import os


def main():
    threading.Thread(target=child).start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt as e:
        # KeyboardInterrupt happens by `signal.SIGINT` from the child thread.
        print('Main thread handle something before it exits')
    print('End main')

def child():
    print('Run child')
    time.sleep(2)
    # Send a signal `signal.SIGINT` to main thread.
    # The signal only head for main thread.
    os.kill(os.getpid(), signal.SIGINT)
    print('End child')


if __name__ == '__main__':
    main()

#1


0  

If your purpose is just to terminate main thread from the child thread, try the below.

如果您的目的只是从子线程终止主线程,请尝试以下操作。

import threading
import signal
import time
import os


def main():
    threading.Thread(target=child).start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt as e:
        # KeyboardInterrupt happens by `signal.SIGINT` from the child thread.
        print('Main thread handle something before it exits')
    print('End main')

def child():
    print('Run child')
    time.sleep(2)
    # Send a signal `signal.SIGINT` to main thread.
    # The signal only head for main thread.
    os.kill(os.getpid(), signal.SIGINT)
    print('End child')


if __name__ == '__main__':
    main()