如何在线程结束时终止主程序?在Python中仍然收到等待进程分离的消息?
如何在线程结束时终止主程序?在Python中仍然收到等待进程分离的消息?
我有一个主程序,定义如下:
main.py
def main(): try: registry.start_server() except: print("关闭程序") 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("错误") raise ValueError finally: fp.close()
server.start是另一个模块中的方法,以while(True)的方式执行一些监听工作。我不确定在PyCharm中点击停止按钮(Ctrl + C信号)时如何停止整个程序。我尝试过使用Event,但没有成功。当信号被捕获时,通过引发异常进入到main.py,但这并不能终止整个程序。它显示"等待程序断开连接"。唯一的方法是使用SIGKILL。我不明白程序卡住的地方在哪里?我还尝试了在信号被捕获时调用sys.exit(0)和将线程设置为守护线程,但都没有帮助。
编辑
另一个模块中的while True方法
def start(self, event): try: while True: if event.is_set(): if self.pubsub.channels: print("进入此处") message = self.pubsub.get_message(True) if message: . . . else: return