Frage zu Threads
Verfasst: Montag 14. Dezember 2009, 22:14
Ich habe ein Programm geschrieben mit 3 Threads, die sich Aufgaben aus einer Queue holen und diese bearbeiten, danach liefern sie die Ergebniss wieder an eine Queue ab.
Das Programm hab ich so geschrieben, mehr oder weniger zusammenkopiert. Daher meine Frage: Warum endet das Programm nicht, wenn alles abgearbeitet ist?
Ich habe eine Idee, nämlich, dass alle Threads auf eine weitere Aufgabe warten, und nicht beendet werden können. Aber wie löse ich das dann? Mit daemon. Und wie würde das dann aussehen?
Hier mal der Code:
Das Programm hab ich so geschrieben, mehr oder weniger zusammenkopiert. Daher meine Frage: Warum endet das Programm nicht, wenn alles abgearbeitet ist?
Ich habe eine Idee, nämlich, dass alle Threads auf eine weitere Aufgabe warten, und nicht beendet werden können. Aber wie löse ich das dann? Mit daemon. Und wie würde das dann aussehen?
Hier mal der Code:
Code: Alles auswählen
import threading
import Queue
class workerThread(threading.Thread):
tasks = Queue.Queue()
results = Queue.Queue()
def __init__(self):
threading.Thread.__init__(self)
def run(self):
task = workerThread.tasks.get()
ident = str(task['id'])
func = task['func']
params = task['params']
result = {'id': ident, 'result': func(params)}
workerThread.results.put(result)
def test1(var):
return "hello " + var
def test2(var):
return var + 2
threads = []
threads.append(workerThread())
threads.append(workerThread())
threads.append(workerThread())
for t in threads:
t.start()
task = {'id': 0, 'func': test1, 'params': "world"}
workerThread.tasks.put(task)
task = {'id': 1, 'func': test1, 'params': "father"}
workerThread.tasks.put(task)
task = {'id': 2, 'func': test2, 'params': 2}
workerThread.tasks.put(task)
print workerThread.results.get()
print workerThread.results.get()
print workerThread.results.get()
for t in threads:
t.join()
workerThread.tasks.join()
workerThread.results.join()