Grundlagen der Python-Profilerstellung

Was ist Profiling?

Einführung von Werkzeugen

IPython und Timeit

Installation

pip install ipython

Beispielcode

profiling.py


def fn_arr():
  for i in range(1000): arr.append(i)
def fn_ls():
  for i in range(1000): ls.append(i)

Messung

Einzelcode-Ausführung

ipython


In [1]:from array import array
In [2]:arr = array('I', [])
In [3]:%timeit -r 10 -n 10 for i in range(1000): arr.insert(0, i)
10 loops, best of 10: 3.02 ms per loop
In [4]:%timeit -r 10 -n 10 for i in range(1000): ls.insert(0, i)
10 loops, best of 10: 3.8 ms per loop

Datei ausführen

ipython


In [1]: from profiling import fn_arr
In [2]: from profiling import fn_ls
In [3]: %timeit -r 10 -n 10 fn_arr()
10 loops, best of 10: 68.6 µs per loop
In [4]: %timeit -r 10 -n 10 fn_ls()
10 loops, best of 10: 8.92 µs per loop

Ermitteln Sie die durchschnittliche Ausführungszeit pro Schleife, wenn 10 Schleifen 10 Mal ausgeführt werden

cProfile

Beispielcode

profiling.py


def fn():
  l = []
  for _ in range(1000000):
    l.append('hoge')
    l.pop()
fn()

Messung

Datei angeben und ausführen

python -m cProfile -s cumulative index.py 

         2000004 function calls in 23.897 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000   23.897   23.897 {built-in method exec}
        1    0.000    0.000   23.897   23.897 index.py:1(<module>)
        1   12.231   12.231   23.897   23.897 index.py:3(fn)
  1000000    5.833    0.000    5.833    0.000 {method 'append' of 'list' objects}
  1000000    5.832    0.000    5.832    0.000 {method 'pop' of 'list' objects}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Messergebnisse ausgeben

python -m cProfile -o profile.stats index.py

Lesen und zeigen Sie die Messergebnisdatei an

python
>>> import pstats
>>> p = pstats.Stats('profile.stats')
>>> p.sort_stats('cumulative')
<pstats.Stats object at 0x7f5cca3f0ef0>
>>> p.print_stats()
Sat Nov 28 06:58:28 2015    profile.stats

         2000004 function calls in 8.477 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    8.477    8.477 {built-in method exec}
        1    0.000    0.000    8.477    8.477 index.py:1(<module>)
        1    4.375    4.375    8.477    8.477 index.py:3(fn)
  1000000    2.088    0.000    2.088    0.000 {method 'pop' of 'list' objects}
  1000000    2.015    0.000    2.015    0.000 {method 'append' of 'list' objects}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}


<pstats.Stats object at 0x7fadfcc20f28>

Außerdem --print_callers () - Anruferinformationen --print_callees () - Informationen, wenn eine Funktion eine andere Funktion aufruft Usw. kann angezeigt werden

line_profiler

Installation

pip install line_profiler
git clone https://github.com/rkern/line_profiler.git

Beispielcode

profiling


@profile
def fn():
  l = []
  for _ in range(1000000):
    l.append('hoge')
    l.pop()
fn()

Messung

> python line_profiler/kernprof.py -l -v index.py

Wrote profile results to index.py.lprof
Timer unit: 1e-06 s

Total time: 8.31965 s
File: index.py
Function: fn at line 2

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     2                                             @profile
     3                                             def fn():
     4         1            6      6.0      0.0      l = []
     5   1000001      2641832      2.6     31.8      for _ in range(1000000):
     6   1000000      2806484      2.8     33.7        l.append('hoge')
     7   1000000      2871333      2.9     34.5        l.pop()

--His --Anzahl der angerufenen Zeiten --Zeit - Ausführungszeit --Per Hit --Eine Ausführungszeit -% Zeit - Laufzeit pro Zeile im Verhältnis zur Gesamtlaufzeit

memory_profiler

Installation

pip install memory_profile
pip install psutil

Beispielcode

Ähnlich wie bei line_profiler

Messung

> python -m memory_profiler index.py
Filename: index.py

Line #    Mem usage    Increment   Line Contents
================================================
     2   10.316 MiB    0.000 MiB     @profile
     3                               def fn():
     4   10.320 MiB    0.004 MiB       l = []
     5   10.320 MiB    0.000 MiB       for _ in range(1000000):
     6   10.320 MiB    0.000 MiB         l.append('hoge')
     7   10.320 MiB    0.000 MiB         l.pop()

Recommended Posts

Grundlagen der Python-Profilerstellung
Python-Grundlagen ⑤
Python-Grundlagen
Python-Grundlagen ④
Python-Grundlagen ③
Python-Grundlagen
Python-Grundlagen
Python-Grundlagen
Python-Grundlagen ③
Python-Grundlagen ②
Python-Grundlagen ②
Python-Grundlagen: Liste
Python-Grundmemorandum
Python-Skript-Profilerstellung
Python CGI-Grundlagen
Python-Grundlagen: Wörterbuch
Python-Grundlagen ①
Grundlagen von Python ①
Python Slice Grundlagen
# Python-Grundlagen (Umfang)
# Python-Grundlagen (#Numpy 1/2)
# Python-Grundlagen (#Numpy 2/2)
# Python-Grundlagen (Funktionen)
Python #Numpy Basics
Python-Grundlagen: Funktionen
# Python-Grundlagen (Klasse)
Zusammenfassung der Python-Grundlagen
Python-Grundlagen ② für Anweisung
Python: Unüberwachtes Lernen: Grundlagen
Python Basic 8 Numpy Test
Errbot: Grundlagen des Python-Chatbots
#Python DeepLearning Basics (Mathematik 1/4)
Python-Grundlagen: Socket, Dnspython
# 4 [Python] Grundlagen der Funktionen
Grundlagen von Python: Ausgabe
Python
Python-Grundlagen: Bedingungen und Iterationen
Paiza Python Primer 4: Grundlagen der Liste
Python x GIS-Grundlagen (1)
Python x GIS-Grundlagen (3)
Paiza Python Primer 5: Grundlagen von Wörterbüchern
Mit Flask erstellte SNS Python-Grundlagen
Erste Schritte mit Python Grundlagen von Python
Überprüfung der Grundlagen von Python (FizzBuzz)
Grundlagen von Python x GIS (Teil 2)
Informationen zur Grundlagenliste der Python-Grundlagen
(Python) Deep Learning Library Chainer-Grundlagen Grundlagen
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
Kafka Python
Python: Grundlagen der Bilderkennung mit CNN
Python-Zusammenfassung
Eingebaute Python
Python-Einschlussnotation
Python-Technik
Statistische Grundlagen und Python, Grafik usw. (Memo)
Python 2.7 Countdown
Python-Memorandum
Python FlowFishMaster
Python-Dienst
Python-Tipps