[英]Forcibly terminate a python script
我正在编写一个带有服务器和客户端的应用程序,我想在关闭 tkinter UI 时停止服务器,但是 while 循环等待 server.accept() 并且永远不会终止,即使使用 sys.exit,它也正在运行线程顺便提一句。 我在 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()
有什么解决办法吗?
任何帮助将不胜感激!
服务器可能正在等待非守护线程退出,但它们不是,因为它们仍在等待活动套接字。 您可以设置thread.daemon=True
以立即退出程序并让系统关闭套接字,或者您可以保留套接字列表并通过通过atexit.register
注册的退出处理程序重置/关闭它们。
通过让套接字通信通过某种优雅的终止,您可以在退出时变得更漂亮,但这取决于您使用的协议。 例如,假设您希望服务器关闭等待所有当前数据发送完毕。 单个 SIGTERM 可能意味着优雅地完成手头的当前任务然后退出。 一个 SIGABRT 或连续两个 SIGINT 可能意味着重置并立即退出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.