Python Academy · Les

Profilen met cProfile en line_profiler

Vind CPU-knelpunten met cProfile en profilering per regel.

Les 3 van 413 stappen

Profilen met cProfile en line_profiler is een gratis Python Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Waarom profileren?

Profileren laat zien welke functies de meeste tijd kosten en helpt bij het bepalen van optimalisaties. Profileer altijd voordat je optimaliseert — gok nooit.

import cProfile

def slow():
    total = 0
    for i in range(1_000_000):
        total += i
    return total

cProfile.run("slow()")

cProfile uitvoeren vanaf de opdrachtregel

Profileer een volledig script zonder het aan te passen: python -m cProfile -s cumtime script.py. Sorteer op cumtime, tottime of calls.

# python -m cProfile -s cumtime my_script.py
#
# ncalls  tottime  percall  cumtime  percall filename:lineno(function)
#   1000    0.500    0.001    2.100    0.002 utils.py:10(process)

cProfile in code

Maak een cProfile.Profile, schakel het in en uit en druk daarna de statistieken af met pstats.

import cProfile, pstats, io

pr = cProfile.Profile()
pr.enable()

# ... code to profile ...

pr.disable()
stream = io.StringIO()
ps = pstats.Stats(pr, stream=stream).sort_stats("cumulative")
ps.print_stats(10)   # top 10
print(stream.getvalue())

Filteren met pstats

Filter de uitvoer van de profiler op een specifieke module of een patroon voor functienamen met print_stats(pattern).

import cProfile, pstats

cProfile.run("my_function()", "profile.out")
stats = pstats.Stats("profile.out")
stats.sort_stats("tottime")
stats.print_stats("mymodule")   # only mymodule functions

line_profiler

line_profiler toont de uitvoeringstijd per regel, niet alleen per functie — essentieel om de knelpuntregel binnen een functie te vinden.

# pip install line_profiler
# Decorate target function:
from line_profiler import profile

@profile
def process(data):
    result = []
    for item in data:          # <- which line is slow?
        result.append(item*2)
    return result

# Run: kernprof -l -v script.py

kernprof CLI

kernprof -l script.py voert het script uit met ingeschakelde regelprofilering; -v toont het rapport direct.

# kernprof -l -v script.py
#
# Line #  Hits  Time  Per Hit  % Time  Line Contents
# ======================================================
#     4    1  2.0   2.0       1.0    result = []
#     5  1000  120.0  0.1     60.0    for item in data:
#     6  1000   80.0  0.1     39.0        result.append(item*2)

Profileren in Jupyter

Jupyter biedt de magische opdrachten %prun (cProfile) en %lprun (line_profiler).

# In a Jupyter cell:
# %prun -s cumulative my_function(data)

# %load_ext line_profiler
# %lprun -f my_function my_function(data)

Prestatieknelpunten identificeren

Richt je op de functies met de hoogste cumulatieve tijd (de volledige aanroepketen) en de hoogste totale tijd (de functie zelf, zonder aangeroepen functies).

# cumtime = total time including callees (find root cause)
# tottime = time in function itself (find where work happens)
#
# Optimise the function with highest tottime first

Voortijdige optimalisatie vermijden

Profileer eerst en optimaliseer daarna het gemeten knelpunt. Veelgebruikte versnellingen in Python zijn ingebouwde functies gebruiken, lussen naar NumPy verplaatsen, herhaalde zoekacties cachen of C aanroepen via ctypes/cffi.

# Before optimising:
# profile shows: process_row() 95% of time

# Speedup: vectorise with NumPy
import numpy as np
arr = np.array(data)
result = arr * 2   # 100x faster than Python loop

py-spy: profiler op basis van steekproeven

py-spy profileert actieve processen zonder de code aan te passen — koppel het aan een actief proces met een PID.

# pip install py-spy

# Profile for 30 s and show flamegraph:
# py-spy top --pid 12345
# py-spy record -o profile.svg --pid 12345 --duration 30

Prestaties meten met timeit

Gebruik timeit voor microbenchmarks van specifieke expressies.

import timeit

result = timeit.timeit(
    "[x*2 for x in range(1000)]",
    number=10_000
)
print(f"{result:.3f} s for 10k runs")

Snelle controle

Wat toont tottime in een cProfile-rapport?

Samenvatting

Gebruik cProfile om trage functies te vinden en line_profiler om de trage regel te vinden. Profileer met -s cumtime om de onderliggende oorzaken te vinden. Optimaliseer alleen bewezen knelpunten — gebruik vectorisatie met NumPy, caching of C-extensies voor de grootste verbeteringen.

Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “Profilen met cProfile en line_profiler” gratis?

Ja — de volledige tekst van “Profilen met cProfile en line_profiler” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “Profilen met cProfile en line_profiler”?

Vind CPU-knelpunten met cProfile en profilering per regel. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Profilen met cProfile en line_profiler”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Reference counting in CPython
  2. De garbagecollector en cyclische referenties
  3. Profilen met cProfile en line_profiler
  4. Geheugenprofilering met tracemalloc
← Terug naar Python Academy