Habe eine Klasse geschrieben, mit der man Threads überwachen kann.
Konkret werden Threads, die nicht mehr laufen, neu gestartet und der ``stdout`` aller Threads wird in ein Logfenster geschrieben. Das ganze läuft alleine über den Systray (wenn mit pythonw gestartet oder mit py2exe unter "windows" kompiliert).
In meinem Fall laufen ein PyroNameServer und ein normaler PyroServer als Threads, müsste prinzipiell aber mit allen Threads funktionieren.
http://paste.pocoo.org/show/104263/
Thread-Controller in GTK für System Tray
Bei der Logger-Klasse muss man natürlich noch mit einem Lock arbeiten...^^
Ihr dürft ruhig etwas zum Code sagen, deshalb habe ich ihn rein gestellt!
Code: Alles auswählen
def __init__(self, main):
self.lock = threading.RLock()
self.main = main
self.textbuffer = gtk.TextBuffer()
def write(self, text):
"""stdout print method"""
self.lock.acquire()
iter = self.textbuffer.get_end_iter()
self.textbuffer.insert(iter,text)
self.lock.release()
Code: Alles auswählen
with self.lock:
#foo
?? Bin bei Python 2.3 stecken geblieben, kenn mich mit den neuen Funktionen gar nicht aus^^DasIch hat geschrieben:Ist dass den so schwer?Code: Alles auswählen
with self.lock: #foo
Dann mach es mit try..finally
Auf jedenfall solltest du sicherstellen dass der Lock in jedem Fall released wird.
Code: Alles auswählen
try:
self.lock.acquire()
# foo
finally:
self.lock.release()