在我的程式中,我有一個執行緒持續監聽一個UDP套接字,如果它得到任何訊息,就把它放到一個佇列中。
其他執行緒基本上是做程式的主要部分。
因此,當我想整齊地終止該程式時。所以我想要一種方法,要么強行殺死執行緒(但要整齊),要么定期從套接字的recv()中出來,這樣我就可以檢查一些狀態變數,并在需要時退出。
uj5u.com熱心網友回復:
強行殺死執行緒通常是不好的做法,應該盡可能地避免。
根據檔案:
Daemon執行緒在關機時突然停止。他們的資源(例如 如打開的檔案、資料庫事務等)可能不會被正確釋放 適當釋放。如果你想讓你的執行緒優雅地停止,請讓它們成為 并使用適當的信號機制,如事件。
基于這些資訊,我建議使用一個Event來關閉執行緒。這里有一個非常好的例子。是否有辦法殺死一個執行緒?
uj5u.com熱心網友回復:
這是我經常使用的:
這是我經常使用的。
import threading
class CustomThread(threading.Thread)。
def __init__(self, *args, **kwargs)。
super(CustomThread, self).__init__(*args, **kwargs)
self._stopper = threading.Event()
def stop(self)。
self._stopper.set()
def stopped(self)。
return self._stopper.isSet()
def run(self)。
while not self.stop():
""
你的執行緒所執行的代碼在這里。
請記住,你必須以非阻塞的方式使用recv()。
""
if __name__ == "__main__"/span>:
t = CustomThread()
t.start()
# ...: t.start()
t.stop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/311836.html
標籤:
