Frage bezügl. Threading

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
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Freitag 11. Januar 2008, 00:33

Hi, ich habe mal eine Frage zu threading.

Ich hab mir ein Server mir python geschrieben auf den ich mich verbinden kann um z.B. ein Programm auf dem root server zu starten ohne das ich mich lange einloggen muss (sondern gleich per python auf den mit python geschriebenen Server verbinden und der startet dann das Programm).

Nun wollte ich mein Klassen (receiver und sender) [zum senden und empfangen] jeweils in einen thread tun (ist ja jetzt auch egal ob das sinnvoll ist oder nicht).

Das problem auf das ich gestoßen bin, ist, wie man nun bitte eine Rückgabewert bekommen soll ?

Code: Alles auswählen

import threading

class MyThread(threading.Thread):
    def run(self):
        return "test"

def main():
    thread1 = MyThread()
    print thread1.start()

if __name__ == "__main__":
    main()
das nur zum Testen, wenn man es ausführt dann wird None ausgegeben anstatt "test"

//Edit:
Das andere was mir noch einfällt ist das Problem beim Senden, da man bei run(self): ja keine weiteren Parameter übergeben darf. Oder sollte man da mit Queue Arbeiten?
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Freitag 11. Januar 2008, 06:30

Ich verwende bei der Kommunikation zwischen Threads und dem eigentlichen Programm meist Callback Methoden oder gar ganze Callbackklassen.
Also Objekte die ich an einen Thread mitübergebe und welche von diesem Thread aus aufgerufen werden um mir ihre Statusänderungen mitzuteilen.
Man kann auch gesharte Datenobjekte verwenden.
Es ist halt nur wichtig das man beim arbeiten mit Threads den Zugriff auf Objekte mit entsprechenden Lockmechanismen abdeckt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 11. Januar 2008, 08:29

Warum machst du einen Thread, wenn du dann erst recht wieder auf das Ergebnis wartest? :roll:
TUFKAB – the user formerly known as blackbird
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Freitag 11. Januar 2008, 11:31

Callbacks find ich selbst als Thread-Communication völlig unbrauchbar.
Benutze lieber Message-Queues.

Vereinfacht gesagt, gib deinem Threads eine Queue.Queue instanz, die du mit objekten füllst die derjenige der die queue abarbeitet versteht.

Das tolle, die Queue ist schon synchronisiert und threading fähig.


Simpelstes Beispiel für die funktionsweise wäre eine liste,
in die der Thread1 z.b. strings packt, und der Thread2 nimmt diese strings aus der liste und gibt sie aus mittels print.

Rückgabewerte gehen garnicht von run().
Antworten