繁体   English   中英

强行终止一个python脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM