Seite 1 von 1

multiprocessing/queue

Verfasst: Donnerstag 5. Mai 2011, 09:05
von moe123
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.

Re: multiprocessing/queue

Verfasst: Donnerstag 5. Mai 2011, 09:27
von 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.