python multitraitement - processus se bloque sur rejoindre pour la grande file d'attente

Je suis en cours d'exécution python 2.7.3 et j'ai remarqué que le suivant comportement étrange. Considérons cet exemple minimal:

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

Quand je boucle de plus de 10 000 habitants ou plus, mon script se bloque sur worker.join(). Il fonctionne très bien lorsque la boucle ne va que jusqu'à 1 000.

Des idées?

InformationsquelleAutor user545424 | 2014-02-08