线程结束时如何终止主程序?还在等待过程在python中分离吗?

时间:2019-02-23 20:37:36

标签: python python-3.x pycharm python-multithreading

我有一个定义如下的主程序:

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)方式进行监听。我不确定在Ctrl + C(信号)的PyCharm中单击“停止”时如何停止整个程序。我尝试了Event,但没有成功。通过捕获信号时引发异常来进入main.py,但这并不终止整个程序。它显示正在等待程序分离。唯一的方法是使用SIGKILL。我不知道该程序在哪里挂起?我也曾尝试在信号被捕获时调用sys.exit(0)并将线程创建为Deamon,但这也无济于事。

编辑 在另一个模块中使用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

0 个答案:

没有答案