217 Stimmen

Was sind die Unterschiede zwischen den Threading- und Multiprocessing-Modulen?

Ich lerne, wie man die threading und die multiprocessing Module in Python verwendet, um bestimmte Operationen parallel auszuführen und meinen Code zu beschleunigen.

Ich finde es schwierig (vielleicht weil ich keine theoretischen Kenntnisse darüber habe) zu verstehen, was der Unterschied zwischen einem threading.Thread() Objekt und einem multiprocessing.Process() Objekt ist.

Außerdem ist es mir nicht ganz klar, wie ich eine Warteschlange von Aufgaben instantiieren kann und nur 4 (zum Beispiel) von ihnen parallel laufen lassen kann, während die anderen auf die Freigabe von Ressourcen warten, bevor sie ausgeführt werden.

Die Beispiele in der Dokumentation finde ich klar, aber nicht sehr umfassend; sobald ich versuche, die Dinge etwas zu komplizieren, erhalte ich viele seltsame Fehler (wie eine Methode, die nicht gepickt werden kann, usw.).

Also, wann sollte ich die threading und multiprocessing Module verwenden?

Können Sie mir einige Ressourcen verlinken, die die Konzepte hinter diesen beiden Modulen erläutern und wie man sie richtig für komplexe Aufgaben verwendet?

-5voto

innosam Punkte 427

Nun, die meisten Fragen werden von Giulio Franco beantwortet. Ich werde weiter auf das Verbraucher-Produzenten-Problem eingehen, was ich vermute, wird Sie auf den richtigen Weg für Ihre Lösung zur Verwendung einer Mehrfadenanwendung bringen.

fill_count = Semaphore(0) # erzeugte Artikel
empty_count = Semaphore(BUFFER_SIZE) # verbleibender Platz
buffer = Buffer()

def producer(fill_count, empty_count, buffer):
    while True:
        item = produceItem()
        empty_count.down();
        buffer.push(item)
        fill_count.up()

def consumer(fill_count, empty_count, buffer):
    while True:
        fill_count.down()
        item = buffer.pop()
        empty_count.up()
        consume_item(item)

Sie können mehr über die Synchronisierungsprimitiven lesen unter:

 http://linux.die.net/man/7/sem_overview
 http://docs.python.org/2/library/threading.html

Der Pseudocode befindet sich oben. Ich vermute, Sie sollten das Verbraucher-Produzenten-Problem recherchieren, um weitere Referenzen zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X