Maksymalny rozmiar dla multiprocessingu.Kolejna pozycja?

Pracuję nad dość dużym projektem w Pythonie, który wymaga jednego z intensywnych obliczeniowo zadań w tle do przeniesienia do innego rdzenia, tak aby usługa główna nie była spowalniana. Podczas używania natknąłem się na jakieś pozornie dziwne zachowaniemultiprocessing.Queue komunikować wyniki z procesu pracownika. Używanie tej samej kolejki dla obu athreading.Thread i amultiprocessing.Process dla celów porównawczych wątek działa dobrze, ale proces nie może się połączyć po umieszczeniu dużego elementu w kolejce. Przestrzegać:

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

Widziałem, że to działa dobrzesize = 10000, ale wisi naworker_p.join() dlasize = 100000. Czy jest jakiś nieodłączny limit wielkości tego, comultiprocessing.Process instancje można umieścić wmultiprocessing.Queue? A może popełniam tutaj oczywisty, fundamentalny błąd?

Dla odniesienia używam Pythona 2.6.5 na Ubuntu 10.04.

questionAnswers(3)

yourAnswerToTheQuestion