multiprocessing/queue

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
moe123
User
Beiträge: 1
Registriert: Donnerstag 5. Mai 2011, 08:58

tach,


ich versuche daten in eine queue zu packen und diese queue mit hilfe von multiprocessing mit mehreren gleichzeitig laufenden prozessen abzuarbeiten. als beispiel das folgende script:

Code: Alles auswählen

import random
import sys
import os
import time
from multiprocessing import Process, JoinableQueue
queue = JoinableQueue()

class ProcessHost(Process):
        def __init__(self, queue):
                Process.__init__(self)
                self.queue = queue

        def run(self):

                while True:
                        number =queue.get()

                        print "Process started: %s" % number

                        time.sleep(random.randint( 1, 8 ))

                        print "Process ended: %s" % number

                        #signals to queue job is done
                        queue.task_done()


start = time.time()

def main():

        for i in range(2):
                p = ProcessHost(queue)
                p.start()

        for j in xrange(9,-1,-1):
                queue.put(j)

        queue.join()

if __name__ == "__main__":
        main()

das script beendet sich jedoch nicht, sondern man muss es mit strg+c abbrechen. hat jemand eine idee, warum das so ist? etwaige programmierfehler bitte ich zu verzeihen, ich übe/lerne noch.
BlackJack

@moe123: Solange die `HostProcess`\es noch laufen ist das Programm nicht zuende. Schau Dir mal das `daemon`-Attribut von `Process` an. Ansonsten könnte man auch ein "Signal" vereinbaren, das einen `Process` beendet. Also zum Beispiel dass Du am Ende so oft `None` in die Queue steckst, wie Prozesse gestartet wurden und ein Prozess die ``while``-Schleife verlässt, wenn er `None` bekommen hat. Oder irgend einen anderen "sentinel"-Wert.
Antworten