Завершение основного потока из дочернего потока

У меня есть поток с графическим интерфейсом и основной поток. После закрытия окна у меня есть метод, вызываемый внутри потока GUI. Я хотел бы распространить это на главный поток, чтобы закончить свою работу. Основной поток выполняет несколько шагов, поэтому я могу установить stop_event, но я не хочу проверять после каждой строки кода для основного потока, установлен ли stop_event.

Спасибо за ваши советы.

1 ответ

Если ваша цель - просто завершить основной поток из дочернего потока, попробуйте следующее.

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()
Другие вопросы по тегам