簡體   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