Frage zu Threads

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
gatoniel
User
Beiträge: 1
Registriert: Montag 14. Dezember 2009, 22:06

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()
[url=http://follow.me.gatoniel.de/gatoniel.de]gatoniel.de[/url]
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Warum joinst du die Queues?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Du solltest dir vielleicht mal klar machen, was "join" überhaupt tut. Tip: Dein Fehler liegt in den Zeilen 43 bis 48.
Das Leben ist wie ein Tennisball.
Antworten