0Pricing
Python Academy · Ders

cProfile ve line_profiler ile Profil Oluşturma

cProfile ve satır satır profil oluşturmayla CPU darboğazlarını bulun.

cProfile ve line_profiler ile Profil Oluşturma, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Neden Profil Oluşturmalısınız?

Profil oluşturma, en çok zamanı hangi işlevlerin tükettiğini belirleyerek optimizasyon çalışmalarına yön verir. Optimizasyon yapmadan önce her zaman profil oluşturun; asla tahminde bulunmayın.

import cProfile

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

cProfile.run("slow()")

CLI'dan cProfile Çalıştırma

Bir betiği değiştirmeden tamamını profilleyin: python -m cProfile -s cumtime script.py. cumtime, tottime veya calls'a göre sıralayın.

# 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)

Kodda cProfile

Bir cProfile.Profile oluşturun, etkinleştirin/devre dışı bırakın, ardından pstats ile istatistikleri yazdırın.

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())

pstats Filtreleme

Profilleyici çıktısını print_stats(pattern) kullanarak belirli bir modüle veya işlev adı desenine göre filtreleyin.

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, yalnızca işlev başına değil, satır başına yürütme süresini de gösterir — bir işlev içindeki en yoğun satırı bulmak için gereklidir.

# 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, satır profillemesi etkinleştirilmiş olarak betiği çalıştırır; -v raporu hemen görüntüler.

# 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)

Jupyter'da Profilleme

Jupyter, %prun (cProfile) ve %lprun (line_profiler) sihirli komutlarını sağlar.

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

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

Darboğazları Belirleme

En yüksek birikimli süreye (tüm çağrı zinciri) ve en yüksek toplam süreye (çağrılanlar hariç yalnızca işlevin kendisi) sahip işlevlere odaklanın.

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

Erken Optimizasyondan Kaçınma

Önce profilleyin, ardından ölçülen darboğazı optimize edin. Yaygın Python hızlandırmaları şunlardır: yerleşik işlevleri kullanmak, döngüleri NumPy'ye taşımak, tekrarlanan aramaları önbelleğe almak veya ctypes/cffi aracılığıyla C çağırmak.

# 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: Örneklemeli Profilleyici

py-spy, kodu değiştirmeden çalışan süreçleri profiller — canlı bir PID'ye bağlanabilirsiniz.

# 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

timeit ile Karşılaştırmalı Ölçüm

Belirli ifadelerin mikro karşılaştırmalı ölçümleri için timeit kullanın.

import timeit

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

Hızlı Kontrol

Bir cProfile raporunda tottime neyi gösterir?

Özet

Yavaş işlevleri bulmak için cProfile, yavaş satırı bulmak için line_profiler kullanın. Temel nedenleri bulmak için -s cumtime ile profilleyin. Yalnızca kanıtlanmış darboğazları optimize edin — en büyük kazanımlar için NumPy vektörleştirmesini, önbelleğe almayı veya C eklentilerini kullanın.

Sıkça Sorulan Sorular

“cProfile ve line_profiler ile Profil Oluşturma” dersi ücretsiz mi?

Evet — “cProfile ve line_profiler ile Profil Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“cProfile ve line_profiler ile Profil Oluşturma” dersinde ne öğreneceğim?

cProfile ve satır satır profil oluşturmayla CPU darboğazlarını bulun. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“cProfile ve line_profiler ile Profil Oluşturma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. CPython Başvuru Sayımı
  2. Çöp Toplayıcı ve Döngüsel Başvurular
  3. cProfile ve line_profiler ile Profil Oluşturma
  4. tracemalloc ile Bellek Profili Oluşturma
← Python Academy Sayfasına Dön