Python performansı: ölçmek, hızlandırmak, C ile genişletmek
Yavaş kodu tahminle değil ölçümle bulur; algoritma, veri yapısı, önbellek ve C uzantılarıyla Python programlarını hızlandırırsın.
Seviye 401 · 18 ders · 18 pratik lab
Dersler
Ölçmek
- timeit ile doğru kıyaslama
- cProfile ve pstats ile profil çıkarmak
- Satır profili ve py-spy ile canlı örnekleme
- Bellek profili: tracemalloc ve nesne boyutu
- Kısa görev: yavaş raporun sıcak noktasını bul
Python içinde hızlanmak
- Karmaşıklık: O(n²)'den kurtulmak
- Veri yapısı seçiminin hıza etkisi
- Hazır işlevler ve döngüyü C'ye bırakmak
- Önbellek ve hafızalama
- array, bytes ve memoryview ile kopyasız veri
- Kısa görev: bir betiği on kat hızlandır
C ile genişletmek
- ctypes ile C kütüphanesi çağırmak
- cffi ile bağlama yazmak
- Cython ile sıcak döngüyü derlemek
- C API ile küçük bir uzantı modülü
- Yerel kodun riskleri: bellek hataları ve GIL
- Kısa görev: sağlama toplamını C'ye taşı ve ölç
Bitirme
- Bitirme görevi: veri hattını ölç, hızlandır, raporla
Pratik lablar
- İki birleştirme yolunu adil ölçmek: Dizgi birleştirmenin iki yolunu timeit ile aynı koşullarda ölç, tekrar sayısını ve en iyi süreyi raporlayan küçük betiği yaz.
- Yavaş raporun sıcak noktasını bulmak: Kestane Market'in dakikalar süren stok raporunu cProfile ile incele, toplam sürenin çoğunu yiyen fonksiyonu bul ve kanıtını pstats çıktısıyla sun.
- Satır profiliyle gizli maliyeti yakalamak: Fonksiyon düzeyinde masum görünen döngüde line_profiler ile pahalı satırı bul, döngü dışına taşı ve hızlanmayı ölçümle belgeleyerek testleri geçir.
- Kapların bellek ayak izini karşılaştırmak: Aynı veriyi liste, demet, küme ve sözlükte tutmanın belleğini derinlemesine ölçen fonksiyonu yaz ve tabloyu üret.
- Büyüyen önbelleği tracemalloc ile bulmak: Her istekte belleği artan hizmette iki anlık görüntüyü karşılaştırıp büyüyen satırı bul ve önbelleğe üst sınır koy.
- Tüm dosyayı belleğe alan işi akışa çevirmek: Büyük CSV'yi listeye dolduran özetleyiciyi üreteçlerle akışa çevir; en yüksek belleğin dosya boyutundan bağımsız kaldığını tracemalloc ile kanıtla.
- Liste aramasını kümeye çevirmek: Kara listede arama yaparken yavaşlayan süzgeçte listeyi kümeyle değiştir ve yüz bin kayıtta süre sınırını geç.
- Karesel eşleştirmeyi tek geçişe indirmek: Aynı gün aynı tutarda yapılan işlemleri iç içe döngüyle arayan kodu sözlükle tek geçişe indir ve sonuçların aynı kaldığını rastgele testlerle göster.
- Bir betiği on kat hızlandırmak: Sarıkız Kargo'nun gönderi eşleştirme betiğini ölç, veri yapısı ve yerleşik fonksiyon değişiklikleriyle en az on kat hızlandır ve çıktının bayt bayt aynı olduğunu kanıtla.
- Posta kodu sorgusunu lru_cache ile önbelleğe almak: Aynı posta kodu için tekrar tekrar çağrılan yavaş ilçe bulma fonksiyonunu lru_cache ile sar ve çağrı sayısının düştüğünü testle göster.
- Kopyasız dilimleme için memoryview kullanmak: Büyük bir tamponu çerçevelere bölerken her dilimde kopya çıkaran ayrıştırıcıyı memoryview ile kopyasız hale getir ve ayırma sayısını ölç.
- Bayat veri döndüren önbelleği onarmak: Fiyat güncellense de eski değeri döndüren önbelleğe süre sonu ve anahtar bazlı geçersiz kılma ekle; hem tazelik hem isabet oranı testlerini geç.
- ctypes ile C fonksiyonu çağırmak: Hazır derlenmiş küçük C kitaplığındaki toplama fonksiyonunu ctypes ile çağır; argtypes ve restype tanımlarını doğru ver.
- Sıcak döngüyü Cython ile derlemek: Saf Python ile yazılmış mesafe hesabı döngüsünü tipli Cython'a çevir, derle ve aynı sonuçla en az beş kat hız kazandığını ölç.
- Yerel çağrıdaki tampon taşmasını kapatmak: ctypes ile C'ye küçük tampon geçip belleği bozan sarmalayıcıda uzunluk denetimini ekle, tampon ömrünü düzelt ve çökme testinin temiz geçtiğini göster.
- Liste alan fonksiyonu önbelleğe almak: Liste ve sözlük argümanı aldığı için önbelleğe alınamayan rapor fonksiyonuna kararlı bir anahtar üret ve üst sınırı olan bir önbellek ekle; isabet oranını testte göster.
- Parçaları bytearray ile biriktirmek: Gelen parçaları bytes nesnelerini art arda toplayarak birleştiren yavaş döngüyü bytearray kullanacak şekilde değiştir ve farkı ölç.
- Tek arabellekle büyük dosya işlemek: Her okumada yeni bayt nesnesi ayıran dosya işleyicisini readinto ve memoryview ile tek bir arabelleği yeniden kullanacak şekilde yaz; testler ayırma sayısını ve sonucu denetler.
Kurs hakkında
Yavaş kodu tahminle değil ölçümle bulur; algoritma, veri yapısı, önbellek ve C uzantılarıyla Python programlarını hızlandırırsın.
Ne öğreneceksin
- Ölçmek
- Python içinde hızlanmak
- C ile genişletmek
- Bitirme
Ön koşullar
Aynı yolun 301 düzeyine kadar olan konularını uygulamış olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 401 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.