ich muss eine ganze Reihe von Timern verwalten können. Also habe ich mir gedacht, ich packe die Timer in ein dictionary, damit ich bequem per name auf die Biester zugreifen kann. Dafür habe ich eine Klasse geschrieben, die so aussieht
Code: Alles auswählen
from threading import Timer, Thread
class TimerPool(object):
def __init__(self):
print "TP: Creating timer pool..."
self.dict = {}
# starts the cleaner timer the first time
self.startCleanerTimer()
# cleaner timer loop
def startCleanerTimer(self):
self.cleanerTimer = Timer(10, self.cleaner)
self.cleanerTimer.start()
# the cleaner
def cleaner(self):
print "TP: Cleaner running..."
count = 0
for key in self.dict:
if self.dict[key]: # --> value for key available
count += 1
print key
else: # --> value for key not available, timer deleted, delete dictionary entry
self.delTimer(key)
print "TP: " + str(count) + " timer hosted"
self.startCleanerTimer()
def add(self, name, timer):
self.dict[name] = timer
print "TP: Timer " + name + " added..."
def get(self, name):
return self.dict[name]
print "TP: Timer " + name + " found..."
def stop(self, name):
timer = self.get(name)
timer.cancel()
print "TP: Timer " + name + " stopped..."
def delTimer(self, name):
self.stop(name)
del self.dict[name]
print "TP: Timer " + name + " deleted..."
1.) Was passiert mit einem Timer-Objekt, nachdem es abgelaufen ist? Ich hätte eigentlich gedacht, dass es von der Garbage Collection früher oder später gelöscht würde. Dem ist aber scheinbar nicht so, weil die Timer, die ich in den Pool packe, auch noch nach deren Ablauf da drin zu sein scheinen.
2.) Wie bekomme ich denn sonst die abgelaufenen Timer aus dem Pool? Gibt es z.B. irgendeinen Aufruf den man an den Timer schicken kann und der antwortet dann, ob er schon abgelaufen ist? Weil dann könnte man durch das dictionary laufen, jeden Timer prüfen und dann löschen.
Grüße!