有沒有辦法在退出之前獲取所有活動的threading.Timer
對象的列表以便cancel
所有這些對象?否則,程序會掛起,等待其完成。列出所有活動的多線程。定時器對象
我可以保留它們的列表,但當它們被觸發時,我也必須將它們刪除。相反,我想知道是否有辦法獲得所有這些。
有沒有辦法在退出之前獲取所有活動的threading.Timer
對象的列表以便cancel
所有這些對象?否則,程序會掛起,等待其完成。列出所有活動的多線程。定時器對象
我可以保留它們的列表,但當它們被觸發時,我也必須將它們刪除。相反,我想知道是否有辦法獲得所有這些。
threading.enumerate()
回報一個將包括定時器的列表是Alive - 它們是threading._Timer
的實例。
>>> t = threading.Timer(30, foo, kwargs = d)
>>> t.start()
>>> t.isAlive()
True
>>> for thing in threading.enumerate():
if isinstance(thing, threading._Timer):
thing.cancel()
>>> t.isAlive()
False
>>>
如果你只需要取消計時器從程序退出時,您可以設置daemon
標誌的計時器,他們將在退出被殺死,而不是等待它們完成:
from threading import Timer
timer = Timer(10, fn)
timer.setDaemon(True)
timer.start()
不,沒有自動全局列表。你應該註冊你的定時器,也許你把它們添加到'weakref.WeakSet'。退出時,調用'cancel()'並捕獲任何異常。 –
@KlausD。似乎是合法的,爲什麼你不把它轉換成答案,以便我可以接受它? –
它們不會出現在'''threading.enumerate()'''結果? – wwii