Thread-Controller in GTK für System Tray

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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/
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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!
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

with self.lock:
    #foo
Ist dass den so schwer?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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^^
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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 ;)
Antworten