Maximale Größe für Multiprocessing.Warteschlangenelement?

Ich arbeite an einem ziemlich großen Projekt in Python, bei dem eine der rechenintensiven Hintergrundaufgaben auf einen anderen Kern verlagert werden muss, damit der Hauptdienst nicht verlangsamt wird. Ich bin bei der Verwendung auf ein anscheinend merkwürdiges Verhalten gestoßenmultiprocessing.Queue Ergebnisse aus dem Arbeitsprozess zu kommunizieren. Verwenden derselben Warteschlange für beide athreading.Thread und einmultiprocessing.Process Zu Vergleichszwecken funktioniert der Thread einwandfrei, aber der Vorgang schlägt fehl, nachdem ein großes Element in die Warteschlange gestellt wurde. Beobachten:

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

Ich habe gesehen, dass dies gut funktioniertsize = 10000, hängt aber anworker_p.join() zumsize = 100000. Gibt es eine inhärente Größenbeschränkung für was?multiprocessing.Process Instanzen können in a setzenmultiprocessing.Queue? Oder mache ich hier einen offensichtlichen, fundamentalen Fehler?

Als Referenz verwende ich Python 2.6.5 unter Ubuntu 10.04.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage