Returncodes aus Threads

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

Mittwoch 22. November 2006, 09:56

Hallo Python-Gemeinde,

leichtsinnigerweise habe ich ein Programm mit Threading geschrieben.

Nun habe ich das Problem, dass ich wissen muss, ob der Thread
erfolgreich abgearbeitet wurde oder nicht.

Ist es möglich einen Rückgabewert (Return) von dem einzelnen
Thread zu erhalten und wenn ja, wie.

Ich starte einen Thread mittels "start" und warte auf dessen Beendigung
mittels "join".

Danke für Tips.

Volker
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Mittwoch 22. November 2006, 10:54

Hey,

folgenden Beispielcode:

Code: Alles auswählen

import threading
import time

class TestThread:
    def RunThread(self):
        objThread = mdlThread()
        print objThread.GetSuccessful()
        objThread.start()
        objThread.join()
        print objThread.GetSuccessful()
        del(objThread)
        
class mdlThread(threading.Thread):
    
    def __init__(self):
        self.__boolOk   = False
       
        
        #Thread start
        threading.Thread.__init__(self)
    
    def GetSuccessful(self):
        return self.__boolOk
    
    def run(self):
        time.sleep(5)
        self.__boolOk = True

if __name__ == "__main__":
    objTest = TestThread()
    objTest.RunThread()
Als Rückgabewert kannst du jeden beliebigen Wert nehmen.

greets george
BlackJack

Mittwoch 22. November 2006, 11:51

Das ist ein bisschen umständlich. Warum eine extra Klasse zum Testen? Das entfernen des Namens `objThread` mittels ``del`` ist überflüssig, der ist lokal zur Methode und würde sowieso gleich nach der Zeile verschwinden. Und das Ergebnis kann man auch direkt als Attribut zur Verfügung stellen, das gehört schliesslich zur API des Objekts.
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Mittwoch 22. November 2006, 12:46

Hey BlackJack,

Das entfernen des Namens `objThread` mittels ``del`` ist überflüssig, der ist lokal zur Methode und würde sowieso gleich nach der Zeile verschwinden.
Da gebe ich dir recht. Da "objThread" lokal in der Funktion deklariert wurde, wird er nach Abbarbeitung der Funktion nicht mehr referenziert und automatisch "aufgeräumt".


Und das Ergebnis kann man auch direkt als Attribut zur Verfügung stellen, das gehört schliesslich zur API des Objekts.
Auch damit hast du recht. Ich habe mir aber angewöhnt, Klassenattribute zu kapseln und diese mit Get/Set zu bearbeiten.

greets george
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Mittwoch 22. November 2006, 13:05

george hat geschrieben:aIch habe mir aber angewöhnt, Klassenattribute zu kapseln und diese mit Get/Set zu bearbeiten.
Mmh.
Getters and setters are evil. Evil, evil, I say! Python objects are not Java beans. Do not write getters and setters. This is what the 'property' built-in is for [...]
Weiterlesen: http://dirtsimple.org/2004/12/python-is-not-java.html
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Mittwoch 22. November 2006, 13:08

Hey Rebecca,

ein interessanter Link.

greets george
Antworten