Seite 1 von 1

Thread-Controller in GTK für System Tray

Verfasst: Dienstag 17. Februar 2009, 12:07
von ms4py
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/

Verfasst: Dienstag 17. Februar 2009, 15:23
von ms4py
Bei der Logger-Klasse muss man natürlich noch mit einem Lock arbeiten...^^

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()
Ihr dürft ruhig etwas zum Code sagen, deshalb habe ich ihn rein gestellt!

Verfasst: Dienstag 17. Februar 2009, 16:11
von DasIch

Code: Alles auswählen

with self.lock:
    #foo
Ist dass den so schwer?

Verfasst: Dienstag 17. Februar 2009, 20:26
von ms4py
DasIch hat geschrieben:

Code: Alles auswählen

with self.lock:
    #foo
Ist dass den so schwer?
?? Bin bei Python 2.3 stecken geblieben, kenn mich mit den neuen Funktionen gar nicht aus^^

Verfasst: Dienstag 17. Februar 2009, 22:45
von DasIch
Dann mach es mit try..finally

Code: Alles auswählen

try:
    self.lock.acquire()
    # foo
finally:
    self.lock.release()
Auf jedenfall solltest du sicherstellen dass der Lock in jedem Fall released wird.

Verfasst: Dienstag 17. Februar 2009, 23:28
von ms4py
DasIch hat geschrieben: Auf jedenfall solltest du sicherstellen dass der Lock in jedem Fall released wird.
Da hast du wohl recht, ein Deadlock in meinem Programm wäre nicht so toll ;)