Tamaño máximo para multiprocesamiento.

Estoy trabajando en un proyecto bastante grande en Python que requiere que una de las tareas en segundo plano de computación intensiva se descargue a otro núcleo, para que el servicio principal no se ralentice. Me he encontrado con un comportamiento aparentemente extraño al usarmultiprocessing.Queue Para comunicar resultados del proceso de trabajo. Usando la misma cola para ambosthreading.Thread y unmultiprocessing.Process para fines de comparación, el hilo funciona bien pero el proceso no se puede unir después de poner un elemento grande en la cola. Observar:

<code>import threading
import multiprocessing

class WorkerThread(threading.Thread):
    def __init__(self, queue, size):
        threading.Thread.__init__(self)
        self.queue = queue
        self.size = size

    def run(self):
        self.queue.put(range(size))


class WorkerProcess(multiprocessing.Process):
    def __init__(self, queue, size):
        multiprocessing.Process.__init__(self)
        self.queue = queue
        self.size = size

    def run(self):
        self.queue.put(range(size))


if __name__ == "__main__":
    size = 100000
    queue = multiprocessing.Queue()

    worker_t = WorkerThread(queue, size)
    worker_p = WorkerProcess(queue, size)

    worker_t.start()
    worker_t.join()
    print 'thread results length:', len(queue.get())

    worker_p.start()
    worker_p.join()
    print 'process results length:', len(queue.get())
</code>

He visto que esto funciona bien parasize = 10000, pero cuelga enworker_p.join() parasize = 100000. ¿Hay algún límite de tamaño inherente a lo quemultiprocessing.Process instancias pueden poner en unamultiprocessing.Queue? ¿O estoy cometiendo algún error obvio y fundamental aquí?

Para referencia, estoy usando Python 2.6.5 en Ubuntu 10.04.

Respuestas a la pregunta(3)

Su respuesta a la pregunta