Seite 1 von 1

Frage zu Threads

Verfasst: Montag 14. Dezember 2009, 22:14
von gatoniel
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:

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()

Verfasst: Montag 14. Dezember 2009, 22:24
von jbs
Warum joinst du die Queues?

Verfasst: Dienstag 15. Dezember 2009, 10:04
von EyDu
Hallo.

Du solltest dir vielleicht mal klar machen, was "join" überhaupt tut. Tip: Dein Fehler liegt in den Zeilen 43 bis 48.