Как завершить основную программу, когда поток заканчивается?Все еще ждете, пока процесс отключится в python? - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть основная программа, которая определяется следующим образом:

main.py

def main():

try:
    registry.start_server()
except:
    print("Shutting down the program")
    pass


if __name__ == '__main__':
    main()

registry.start_server () - это метод в другом модуле, который выглядит следующим образом:

def start_server():
    t_server = threading.Thread(target=server.start)
    t_server.start()
    try:
        t_server.join()
    except KeyboardInterrupt:
        print("Error")
        raise ValueError

finally:
    fp.close()

server.start - это метод в другом модуле, который выполняет некоторые прослушивания в режиме while (True) .Я не уверен, как остановить всю программу при нажатии Стоп в PyCharm, который является Ctrl + C (Сигнал).Я пытался с Event, но безуспешно.Я получаю к main.py, вызывая исключение, когда сигнал пойман, но это не останавливает всю программу.Он показывает Ожидание отсоединения программы .Единственный способ - использовать SIGKILL.Я не понимаю, где программа продолжает зависать?Я также пытался вызвать sys.exit (0), когда сигнал был пойман, и создать поток как Деймон, но это тоже не помогло.

EDIT Метод True в другом модуле

def start(self, event):

 try:
        while True:
            if event.is_set():
                if self.pubsub.channels:
                    print("It enters here")
                    message = self.pubsub.get_message(True)
                    if message:
                          . 
                          .
                          .
           else:
                return
...