我正在编写一个带有服务器和客户端的应用程序,我想在关闭tkinter UI时停止服务器,但while循环等待server.accept()并且从不终止,即使使用sys.exit,它也在运行线程btw。我正在gui close上运行一个函数,但它不想终止。
示例如下:
while waiting_for_connection: # This is in a threaded function
conn, addr = server.accept() # It's stuck on this line while waiting for connection
thread = threading.Thread(target=handle_client, args=(conn, addr)) # Here it connects, but it doesn't reach the end of a loop if no one connects
thread.start()
有什么办法解决这个问题吗?
任何帮助都将不胜感激!
发布于 2020-10-03 17:46:26
可能服务器正在等待非守护程序线程退出,但它们不是,因为它们仍在等待活动的套接字。您可以将thread.daemon=True
设置为立即退出程序并让系统关闭套接字,也可以保留套接字列表并通过通过atexit.register
注册的退出处理程序重置/关闭套接字。
通过让套接字通信通过某种优雅的终止,您可以在退出时变得更有趣,但这取决于您使用的协议。例如,假设您希望服务器关闭等待所有当前数据发送完毕。单个SIGTERM可能意味着优雅地完成手头的当前任务,然后退出。一个SIGABRT或连续两个SIGABRT可能意味着重置并立即退出。
https://stackoverflow.com/questions/64186769
复制相似问题