Ich habe versucht, die Geschwindigkeit von Pipe
über Queue
vom Paket multiprocessing
zu vergleichen. T dachte Pipe
wäre schneller als Queue
verwendet Pipe
intern.
Seltsamerweise ist Pipe
langsamer als Queue
beim Senden eines großen numpy Arrays. Was fehlt mir hier?
Rohr:
%Vor%Warteschlange
%Vor%Sie können ein Experiment machen und das Folgende in Ihren Pipe Code einfügen.
%Vor%Dies gibt Ihnen die Zeit, die zum Erstellen der Daten für Ihren Test benötigt wird. Auf meinem System dauert das ungefähr 2,9 Sekunden.
Unter der Haube implementiert das Objekt queue
einen Puffer und einen Thread-Versand. Der Thread befindet sich noch immer im selben Prozess, aber bei der Verwendung muss die Datenerstellung nicht auf den Abschluss der System-IO warten. Es paralisiert effektiv die Operationen. Versuchen Sie, Ihren Pipe -Code zu modifizieren, indem Sie ein einfaches Threading implementieren (Disclaimer, Code hier ist nur für Test und nicht produktionsbereit).
Auf meinem Rechner dauert dies 3,4 Sekunden, was fast genau so ist wie Ihr Queue oben.
Von Ссылка
In Cython kann aufgrund der Global Interpreter-Sperre nur ein Thread Python-Code auf einmal ausführen. Allerdings ist Threading immer noch ein geeignetes Modell, wenn Sie mehrere I / O-gebundene Aufgaben ausführen möchten gleichzeitig.
Die queue
und pipe
Unterschiede sind definitiv ein seltsames Implementierungsdetail, bis Sie sich ein wenig damit beschäftigen.
Ich nehme an, dass Sie mit Ihrem Druckbefehl Python2 verwenden. Das seltsame Verhalten kann jedoch nicht mit Python3 repliziert werden, wobei Pipe
tatsächlich schneller ist als Queue
.
Ergebnisse in:
%Vor%Tags und Links python