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.