Seite 1 von 1

Frage zu thread.setDaemon ?

Verfasst: Samstag 16. Juni 2007, 00:01
von thonix
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()

Verfasst: Samstag 16. Juni 2007, 04:01
von Volvic
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.