我有一个定义如下的主程序:
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