Frage zu thread.setDaemon ?

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
thonix
User
Beiträge: 47
Registriert: Samstag 12. August 2006, 00:06

Samstag 16. Juni 2007, 00:01

Moin zusammen,

ich habe ien bissel mit Threads und Queues rumgespielt und habe, mir bis jetzt unerklärlich, ein Ergebniss mit thread.setDaemon festgestellt.

Der Thread holt sich aus einer Queue einfach ein paar Daten. Wenn keine Daten mehr da sind läuft das Hauptprogramm aus und der Thread bleibt. Alles klar. Wenn ich aber dem Thread die Eigenschaft thread.setDaemon gebe dann beendet sich der Thread nachdem das Haupprogramm beendet wurde. Sollte diese Option aber nicht das Gegenteil bewirken ?

Bzw in welchen Zusammenhang steht es mit dem Queue.Queue().join(). Denn wenn das nicht gesetzt ist bekomme ich vom Thread nicht einmal mehr eine Ausgabe. (Wird das Hautprogramm zu schnell beendet ?)

Vielleicht kann mich da jemand aufklären ?

Ein kurzes Beispiel:

Code: Alles auswählen

#!/usr/bin/python

import threading
import Queue

class Work (threading.Thread):
    
    def __init__(self,queue):
        threading.Thread.__init__(self)
        
        self.setDaemon(True)
        self.queue = queue
        
    def run(self):

        while True:
            print self.queue.get()
            self.queue.task_done()
    
queue = Queue.Queue()    

for x in range(2):
    Work(queue).start()

for x in range(10):
    queue.put(x)

queue.join()
Volvic
User
Beiträge: 30
Registriert: Donnerstag 14. Juni 2007, 05:18

Samstag 16. Juni 2007, 04:01

hier ein zitat aus den python docs:
setDaemon( daemonic)
Set the thread's daemon flag to the Boolean value daemonic. This must be called before start() is called.

The initial value is inherited from the creating thread.

The entire Python program exits when no active non-daemon threads are left.
Antworten