Maximale Größe für multiprocessing.Queue-Element?

Arbeite ich an einem ziemlich großen Projekt in Python, das erfordert eine der compute-intensive hintergrund-tasks übergeben werden, um einen anderen Kern, so dass die wichtigsten service wird nicht verlangsamt. Ich bin gekommen, über einige scheinbar seltsame Verhalten beim Einsatz multiprocessing.Queue zu kommunizieren, die Ergebnisse aus dem Arbeitsprozess. Mit der gleichen Warteschlange für beide eine threading.Thread und ein multiprocessing.Process zum Vergleich, der thread funktioniert Prima, aber der Prozess nicht beitreten, nachdem er ein großes Element in der Warteschlange. Beachten Sie:

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

Habe ich gesehen, dass dies funktioniert gut für size = 10000, aber hängt bei worker_p.join() für size = 100000. Gibt es einige inhärente Größe, die Begrenzung, was multiprocessing.Process Instanzen können in eine multiprocessing.Queue? Oder bin ich es, einige offensichtliche, grundlegende Fehler hier?

Referenz, ich bin mit Python 2.6.5 auf Ubuntu 10.04.

InformationsquelleAutor Brendan Wood | 2012-04-05

Schreibe einen Kommentar