Vergleichen Sie die Geschwindigkeit von Python Append und Map

Ich werde nachdrucken, was ich für das Unternehmen geschrieben habe

Zweck

Überprüfen Sie den Unterschied zwischen der Verarbeitungsgeschwindigkeit und der Speichernutzung des Codes, den Sie zuerst geschrieben haben (mithilfe von Anhängen), und dem Code, auf den in der Überprüfung hingewiesen wurde (mithilfe von Map)

Verifizierungs-Schlüssel

Bereiten Sie ein Programm vor, das die beiden Arrays zusammenführt und ausgibt. (Ursprünglich war es ein Programm, das aus der Datenbank abgerufene Felder und Zeilen zusammenführt und als json ausgibt.)

Die zur Messung verwendeten Werkzeuge sind wie folgt.

--memory_profiler: Sie können die Zunahme oder Abnahme des Speichers zeilenweise messen. Sie können auch die aktuelle Verwendung und das Inkrement überprüfen --line_profiler: Die Verarbeitungsgeschwindigkeit kann zeilenweise gemessen werden.

Überprüfung 1


from memory_profiler import profile
from line_profiler import LineProfiler


@profile(precision=8)
def main():
    a = [1, 2, 3]
    b = ['1', '2', '3']

    results = []
    for _ in range(1000):
        results.append(dict(zip(a, b)))

    for r in results:
        print(r) # {1: '1', 2: '2', 3: '3'}


if __name__ == "__main__":
    #Beim Messen des Speichers
    #    main()
    
    #Beim Vergleich der Verarbeitungsgeschwindigkeiten
    prof = LineProfiler()
    prof.add_function(main)
    prof.runcall(main)
    prof.print_stats(output_unit=1e-9)

Überprüfung 2

Mit Ausnahme des Inhalts der Methode entspricht sie der Validierung 1 und wird daher weggelassen.

def main():
    a = [1, 2, 3]
    b = ['1', '2', '3']

    results = map(dict, (zip(a, b) for _ in range(1000)))

    for r in results:
        print(r) # {1: '1', 2: '2', 3: '3'}

Ergebnis

Die Datenmenge war anfangs gering, aber der Unterschied war spürbar.

Verarbeitungsgeschwindigkeit

Überprüfung 1

Total time: 0.087002 s
File: append.py
Function: main at line 6

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     6                                           def main():
     7         1       4000.0   4000.0      0.0      a = [1, 2, 3]
     8         1       1000.0   1000.0      0.0      b = ['1', '2', '3']
     9                                           
    10         1          0.0      0.0      0.0      results = []
    11      1001     395000.0    394.6      0.5      for _ in range(1000):
    12      1000    1973000.0   1973.0      2.3          results.append(dict(zip(a, b)))
    13                                           
    14      1001    5854000.0   5848.2      6.7      for r in results:
    15      1000   78775000.0  78775.0     90.5          print(r)

Überprüfung 2

Total time: 0.069483 s
File: map.py
Function: main at line 7

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     7                                           def main():
     8         1       4000.0   4000.0      0.0      a = [1, 2, 3]
     9         1       1000.0   1000.0      0.0      b = ['1', '2', '3']
    10                                           
    11         1       2000.0   2000.0      0.0      results = map(dict, (zip(a, b) for _ in range(1000)))
    12                                           
    13      1001    8476000.0   8467.5     12.2      for r in results:
    14      1000   61000000.0  61000.0     87.8          print(r)

Speichernutzung

Überprüfung 1

Line #    Mem usage    Increment   Line Contents
================================================
     5  38.28125000 MiB  38.28125000 MiB   @profile(precision=8)
     6                             def main():
     7  38.28515625 MiB   0.00390625 MiB       a = [1, 2, 3]
     8  38.28515625 MiB   0.00000000 MiB       b = ['1', '2', '3']
     9                             
    10  38.28515625 MiB   0.00000000 MiB       results = []
    11  38.38671875 MiB   0.00390625 MiB       for _ in range(1000):
    12  38.38671875 MiB   0.00390625 MiB           results.append(dict(zip(a, b)))
    13                             
    14  38.39453125 MiB   0.00000000 MiB       for r in results:
    15  38.39453125 MiB   0.00781250 MiB           print(r)

Überprüfung 2

Line #    Mem usage    Increment   Line Contents
================================================
     5  38.22656250 MiB  38.22656250 MiB   @profile(precision=8)
     6                             def main():
     7  38.23046875 MiB   0.00390625 MiB       a = [1, 2, 3]
     8  38.23046875 MiB   0.00000000 MiB       b = ['1', '2', '3']
     9                             
    10  38.23828125 MiB   0.00000000 MiB       results = map(dict, (zip(a, b) for _ in range(1000)))
    11                             
    12  38.23828125 MiB   0.00000000 MiB       for r in results:
    13  38.23828125 MiB   0.00781250 MiB           print(r)

abschließend

Bitte lassen Sie mich wissen, wenn es etwas Seltsames gibt.

Recommended Posts

Vergleichen Sie die Geschwindigkeit von Python Append und Map
Die Geschichte von Python und die Geschichte von NaN
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Zusammenfassung der Unterschiede zwischen PHP und Python
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Angeben des Bereichs von Ruby- und Python-Arrays
Ruby, Python und Map
der Zen von Python
Öffnen Sie eine Excel-Datei in Python und färben Sie die Karte von Japan
Berücksichtigung der Stärken und Schwächen von Python
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Der Prozess der Installation von Atom und der Ausführung von Python
Python netCDF4 Lesegeschwindigkeit und Verschachtelung von for-Anweisungen
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Ich habe mir die Versionen von Blender und Python angesehen
[Python] Richtige Verwendung der Karte
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Auf dem Weg zum Ruhestand von Python2
Vergleichen wir die Python-Array-ähnlichen Typen
Vergleichen Sie die Schriftarten von Jupyter-Themen
Über die Funktionen von Python
Quellinstallation und Installation von Python
Die Kraft der Pandas: Python
Vergleichen Sie die Lese- / Schreibgeschwindigkeit und Kapazität von CSV, Pickle, Joblib und Parkett in einer Python-Umgebung
Das Ergebnis der Erstellung eines Kartenalbums italienischer Jungvermählten in Python und dessen Weitergabe
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
[Python] Herons Formelfunktionalisierung und Berechnung der maximalen Fläche
[Maya Python] Zerquetsche den Inhalt des Skripts 1 ~ Camera Speed Editor
Die Geschichte von Python und die Geschichte von NaN
Der Prozess, Python-Code objektorientiert zu machen und zu verbessern
Der Websocket von toio (nodejs) und python / websocket stellen keine Verbindung her.
Ich möchte die Natur von Python und Pip kennenlernen
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
Installation von SciPy und matplotlib (Python)
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
Existenz aus Sicht von Python
pyenv-change die Python-Version von virtualenv
[Python] Passen Sie den Standard für die Farbkarte an
Dies und das von Python-Eigenschaften
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
Überprüfung der Grundlagen von Python (FizzBuzz)
Vergleichen Sie Python- und JavaScript-Array-Schleifen
Geschwindigkeitsvergleich der Python-XML-Perspektive
Python String Processing Map und Lambda
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Informationen zur Grundlagenliste der Python-Grundlagen
Zusammenfassung der Python-Indizes und -Slices
Reputation von Python-Büchern und Nachschlagewerken
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut