Probleme beim Aufwecken eines 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
Robinho
User
Beiträge: 4
Registriert: Freitag 2. Juni 2006, 12:09

Freitag 2. Juni 2006, 12:34

Hallo,

ich beschäftige mich zurzeit mit Python-Threads und kriege trotz tagelanger Experimente einen schlafenden Thread nicht mehr geweckt!

Ich würde mich riesig freuen, wenn mir einer von Euch weiterhelfen könnte!

Erklärung zum Code:
2 Threads werden gestartet. Der 1. Thread legt sich schlafen (Methode sleep()), der 2. soll ihn wieder aufwecken (Methode wake()).

Code: Alles auswählen

import threading
threadanzahl=2
counter = 0

class Counter(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.Condition = threading.Condition()

    def run(self):
        global counter
        self.lock.acquire()
        counter += 1
        if counter == 1:
            Counter.sleep(self)
        else:
            Counter.wake(self)
        self.lock.release()

    def sleep(self):
        self.Condition.acquire()
        print "gehe schlafen"
        self.Condition.wait()
        print "bin wider wach"
        self.Condition.release()

    def wake(self):
        self.Condition.acquire()
        print "wecke auf"
        self.Condition.notify()
        self.Condition.release() 

thread = {}
for i in range(1,threadanzahl+1):
    thread[i] = Counter()    
    thread[i].start()

for i in range(1,threadanzahl+1):      
    thread[i].join()

print "done"
Vielen Dank für die Mühe!
BlackJack

Freitag 2. Juni 2006, 22:43

Robinho hat geschrieben:Erklärung zum Code:
2 Threads werden gestartet. Der 1. Thread legt sich schlafen (Methode sleep()), der 2. soll ihn wieder aufwecken (Methode wake()).
Der erste legt sich schlafen und der zweite weckt sich selbst auf.

Und statt ``Counter.methode(self)`` schreibt man besser ``self.methode()``.
Robinho
User
Beiträge: 4
Registriert: Freitag 2. Juni 2006, 12:09

Samstag 3. Juni 2006, 10:24

vielen Dank für diesen Hinweis, läuft jetzt :)
Antworten