Queue.Queue
ist nur eine speicherinterne Warteschlange, die weiß, wie sie mit mehreren Threads umgehen soll, die sie gleichzeitig verwenden. Es funktioniert nur, wenn sowohl der Produzent als auch der Verbraucher in demselben Prozess sind.
Sobald Sie sie in getrennten Systemprozessen haben, worum es in der multiprocessing
-Bibliothek geht, sind die Dinge ein wenig komplizierter, weil die Prozesse nicht mehr den gleichen Speicher teilen. Sie benötigen eine Art Interprozess-Kommunikationsmethode, damit die beiden Prozesse miteinander kommunizieren können. Es kann ein gemeinsamer Speicher sein, eine Pipe oder ein Socket oder möglicherweise etwas anderes. Das macht multiprocessing.Queue
. Es verwendet Pipes, um zwei Prozessen die Kommunikation zu ermöglichen. Es wird einfach die gleiche API wie Queue.Queue
implementiert, da die meisten Python-Programmierer bereits damit vertraut sind.
Beachten Sie auch, dass Sie bei der Verwendung der Warteschlange eine Wettlaufsituation in Ihrem Programm haben. Denken Sie darüber nach, was passiert, wenn der Prozess write
in die Warteschlange schreibt, nachdem Sie q.empty()
im Prozess read
aufgerufen haben. Normalerweise würden Sie der Warteschlange ein spezielles Element hinzufügen (z. B. None
), was bedeuten würde, dass der Benutzer anhalten kann.
Tags und Links python multiprocessing