我想知道:在主應用程序收到SIGINT的情況下,殺死主Python應用程序啓動的線程的最佳實踐是什麼?Python;殺死其他線程的最佳實踐
我做下面的事情,但我強烈懷疑,因爲需要殺死其他發表的主題是這樣一個共同的問題,那有可能是一個更好的方式來做到這一點:
class Handler(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.keep_go = True
def run(self):
while self.keep_go:
#do something
def stop(self): #seems like i shouldn't have to do this myself
self.keep_go = False
try:
h = Handler()
h.start()
while True: #ENTER SOME OTHER LOOP HERE
#do something else
except KeyboardInterrupt: #seems like i shouldn't have to do this myself
pass
finally:
h.stop()
以下職位是相關的,但是我不清楚實際推薦的做法是什麼,因爲答案更多的是「這裏有一些可能的做法,你可以做到這一點」。另外,我不需要「突然」殺掉某些東西。我可以這樣做「正確的方式」:Is there any way to kill a Thread in Python?
編輯:我想我的方法有一個小缺陷是它不會終止while循環中的當前處理。它不會收到一個「殺死事件」,將該循環作爲事務「滾動」回來,也不會停止循環的其餘部分。
它看起來像你在你的代碼中複製錯誤; 'try'丟失。 – dano
你上面粘貼的代碼並沒有做你認爲它會做的事:'h.start()'不會阻塞,所以'h.stop()'立即被調用,導致線程停止,並且整個程序退出。 – dano
我不是專家,但這也是我完成關閉線程的方式。如果你有一個線程的功能是連續運行的(例如,監視某個事物的狀態),那麼如果沒有某種方式讓它停止,比如你現在做什麼,它會知道如何停下來? – Dval