Максимальный размер для многопроцессорной обработки. Элемент очереди?

Я работаю над довольно крупным проектом на Python, который требует, чтобы одна из ресурсоемких фоновых задач была выгружена в другое ядро, чтобы основной сервис не замедлялся. Я столкнулся с каким-то странным поведением при использованииmultiprocessing.Queue сообщить результаты рабочего процесса. Использование одной и той же очереди дляthreading.Thread иmultiprocessing.Process для сравнения поток работает просто отлично, но процессу не удается присоединиться после помещения большого элемента в очередь. Заметим:

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

Я видел, что это прекрасно работает дляsize = 10000, но висит наworker_p.join() заsize = 100000, Есть ли какое-то ограничение на размерmultiprocessing.Process экземпляры могут положить вmultiprocessing.Queue? Или я делаю здесь очевидную фундаментальную ошибку?

Для справки, я использую Python 2.6.5 в Ubuntu 10.04.

Ответы на вопрос(3)

Ваш ответ на вопрос