【问题标题】:Forcibly terminate a python script强制终止 python 脚本
【发布时间】:2020-10-03 16:57:22
【问题描述】:

我正在编写一个带有服务器和客户端的应用程序,我想在关闭 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()

有什么解决办法吗?

任何帮助将不胜感激!

【问题讨论】:

  • 请提供预期的MRE
  • @Prune 我编辑了我的帖子,看看!
  • 是的。现在,也许客户端-服务器专家可以提供帮助。
  • 创建话题的时候设置daemon=True了吗?

标签: python multithreading tkinter while-loop


【解决方案1】:

服务器可能正在等待非守护线程退出,但不是因为它们仍在等待活动套接字。您可以设置thread.daemon=True 立即退出程序并让系统关闭套接字,或者您可以保留套接字列表并通过atexit.register 注册的退出处理程序重置/关闭它们。

通过让套接字通信通过某种优雅的终止,您可以在退出时获得更好的体验,但这取决于您使用的协议。例如,假设您希望服务器关闭等到所有当前数据都发送完毕。单个 SIGTERM 可能意味着优雅地完成手头的当前任务然后退出。一个 SIGABRT 或连续两个 SIGINT 可能意味着现在重置并退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2018-12-29
    • 2011-03-04
    • 2011-05-10
    • 1970-01-01
    • 2022-01-19
    • 2013-11-15
    相关资源
    最近更新 更多