Thread-Controller in GTK für System Tray

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

Thread-Controller in GTK für System Tray

Beitragvon ms4py » Dienstag 17. Februar 2009, 12:07

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

Beitragvon ms4py » Dienstag 17. Februar 2009, 15:23

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: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Dienstag 17. Februar 2009, 16:11

Code: Alles auswählen

with self.lock:
    #foo

Ist dass den so schwer?
Benutzeravatar
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Beitragvon ms4py » Dienstag 17. Februar 2009, 20:26

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: 2402
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Dienstag 17. Februar 2009, 22:45

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

Beitragvon ms4py » Dienstag 17. Februar 2009, 23:28

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder