python-multiprocessing - Prozess hängt mitmachen für große Warteschlange

Ich bin mit python 2.7.3 und mir ist aufgefallen das Folgendes merkwürdige Verhalten. Betrachten Sie dieses minimal-Beispiel:

from multiprocessing import Process, Queue

def foo(qin, qout):
    while True:
        bar = qin.get()
        if bar is None:
            break
        qout.put({'bar': bar})

if __name__ == '__main__':
    import sys

    qin = Queue()
    qout = Queue()
    worker = Process(target=foo,args=(qin,qout))
    worker.start()

    for i in range(100000):
        print i
        sys.stdout.flush()
        qin.put(i**2)

    qin.put(None)
    worker.join()

Wenn ich den loop über die 10.000 oder mehr, mein Skript hängt sich auf worker.join(). Es funktioniert gut, wenn die Schleife geht nur bis 1.000.

Irgendwelche Ideen?

InformationsquelleAutor user545424 | 2014-02-08
Schreibe einen Kommentar