Frage zu thread.setDaemon ?
Verfasst: 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:
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()