- Konu sahibi
- #1
Python'da zaman kaybını azaltmak için önce yapmak istediğiniz işi küçük ve ölçülebilir bir sonuca indirin; ardından çalışma ortamını sabitleyin, küçük adımlarla ilerleyin ve her adımın çıktısını kontrol edin. Böylece bir hata çıktığında bütün projeyi yeniden incelemek yerine sorunu son değişiklikte arayabilirsiniz.
Öğrenme veya geliştirme sırasında aynı anda çok sayıda konuya yönelmek yerine, mevcut işin gerektirdiği beceriyi seçin. Örneğin sunucu günlüklerini inceleyecekseniz önce bir dosyayı okuyup belirli satırları sayan küçük bir program yazın. Dosya biçimi, beklenen çıktı ve dosya bulunamadığında ne olacağı belli olduktan sonra tarih filtresi veya raporlama gibi özelliklere geçin.
Yeni bir kütüphane kurmadan önce standart kütüphanenin ihtiyacı karşılayıp karşılamadığını kontrol edin. Dış paket gerekiyorsa kurulumunu ve projede kullanılan sürümünü kaydedin; böylece ortamı başka bir makinede yeniden hazırlamak kolaylaşır. Sırf popüler olduğu için araç değiştirmek veya aynı iş için çok sayıda seçenek denemek yerine, önceden belirlediğiniz ihtiyaçlara uygun ilk çözümle küçük bir deneme yapın.
Proje başına ayrı bir sanal ortam kullanmak, paketleri diğer projelerden ayırmaya yardımcı olur. Python kuruluysa proje klasöründe terminal açıp
Bir paket kurulu görünmesine rağmen içe aktarılamıyorsa önce kodun çalıştığı yorumlayıcıyla paketin kurulduğu ortamın aynı olup olmadığını kontrol edin. Sanal ortam paket karışıklığını azaltır; ancak tek başına uygulamanın doğru çalıştığını veya başka bir makinede bütün bağımlılıkların hazır olduğunu kanıtlamaz.
Hata çıktığında hata mesajının son satırını ve gösterilen dosya ile satır numarasını okuyun. Sorunu en küçük girdiyle yeniden üretin ve aynı anda tek değişiklik yapın. Tanılama için çıktı alıyorsanız parola, erişim anahtarı ve kişisel veri yazdırmayın; geçici çıktıları işiniz bitince kaldırın.
Varsayımsal olarak bir günlük dosyasındaki hata satırlarını saydığınızı düşünün. Aşağıdaki örneği proje klasöründe
Aynı klasörde
Bu test yalnızca verilen üç satırdaki sayımı doğrular; gerçek dosya okumasını veya farklı yazım biçimlerini doğrulamaz. İhtiyaca göre boş liste, küçük harfli kayıt ve dosya okuma için ayrı testler ekleyin. Gerçek günlük dosyalarıyla çalışırken erişim izinlerini ve hassas veri içeriğini de dikkate alın.
Program doğru çalışıyor ama beklenenden uzun sürüyorsa, önce aynı girdiyle çalıştırma süresini gözlemleyin. Ardından uygun bir test verisiyle
Profil çıktısı hangi işlevlerde zaman biriktiğini göstererek inceleme için başlangıç noktası sunar; tek başına yavaşlığın nedenini kanıtlamaz. En çok zaman alan ilgili bölümü inceleyin, bir değişiklik yapın ve aynı koşullarda yeniden ölçün. Süre düzelmediyse varsayımı değiştirip örneğin dosya erişimi veya ağ beklemesi gibi başka etkenleri araştırın.
İşi küçük bir hedefle başlatın
Öğrenme veya geliştirme sırasında aynı anda çok sayıda konuya yönelmek yerine, mevcut işin gerektirdiği beceriyi seçin. Örneğin sunucu günlüklerini inceleyecekseniz önce bir dosyayı okuyup belirli satırları sayan küçük bir program yazın. Dosya biçimi, beklenen çıktı ve dosya bulunamadığında ne olacağı belli olduktan sonra tarih filtresi veya raporlama gibi özelliklere geçin.
Yeni bir kütüphane kurmadan önce standart kütüphanenin ihtiyacı karşılayıp karşılamadığını kontrol edin. Dış paket gerekiyorsa kurulumunu ve projede kullanılan sürümünü kaydedin; böylece ortamı başka bir makinede yeniden hazırlamak kolaylaşır. Sırf popüler olduğu için araç değiştirmek veya aynı iş için çok sayıda seçenek denemek yerine, önceden belirlediğiniz ihtiyaçlara uygun ilk çözümle küçük bir deneme yapın.
Ortam ve hataları baştan kontrol edin
Proje başına ayrı bir sanal ortam kullanmak, paketleri diğer projelerden ayırmaya yardımcı olur. Python kuruluysa proje klasöründe terminal açıp
python -m venv .venv komutunu çalıştırabilirsiniz; bazı sistemlerde python yerine python3 kullanmanız gerekir. Ortamı oluşturduktan sonra editörünüzde bu ortama ait Python yorumlayıcısını seçin ve paketleri aynı ortamda kurun.Bir paket kurulu görünmesine rağmen içe aktarılamıyorsa önce kodun çalıştığı yorumlayıcıyla paketin kurulduğu ortamın aynı olup olmadığını kontrol edin. Sanal ortam paket karışıklığını azaltır; ancak tek başına uygulamanın doğru çalıştığını veya başka bir makinede bütün bağımlılıkların hazır olduğunu kanıtlamaz.
Hata çıktığında hata mesajının son satırını ve gösterilen dosya ile satır numarasını okuyun. Sorunu en küçük girdiyle yeniden üretin ve aynı anda tek değişiklik yapın. Tanılama için çıktı alıyorsanız parola, erişim anahtarı ve kişisel veri yazdırmayın; geçici çıktıları işiniz bitince kaldırın.
Tekrarlanan kontrolü küçük bir testle kısaltın
Varsayımsal olarak bir günlük dosyasındaki hata satırlarını saydığınızı düşünün. Aşağıdaki örneği proje klasöründe
test_sayac.py adıyla kaydedin. İşlev, kendisine verilen satırlarda ERROR geçenleri sayar; test de iki eşleşme bekler.
Python:
import unittest
def hata_say(satirlar):
return sum(1 for satir in satirlar if "ERROR" in satir)
class SayacTesti(unittest.TestCase):
def test_iki_hata(self):
satirlar = ["INFO başladı", "ERROR bağlantı", "ERROR zaman aşımı"]
self.assertEqual(hata_say(satirlar), 2)
if __name__ == "__main__":
unittest.main()
Aynı klasörde
python -m unittest test_sayac komutunu çalıştırın. Test başarılıysa çıktıda bir testin çalıştığı ve OK görülür. Başarısızsa beklenen değerle elde edilen değeri ve test girdisini karşılaştırın; içe aktarma hatasında dosya adını, bulunduğunuz klasörü ve kullanılan yorumlayıcıyı kontrol edin.Bu test yalnızca verilen üç satırdaki sayımı doğrular; gerçek dosya okumasını veya farklı yazım biçimlerini doğrulamaz. İhtiyaca göre boş liste, küçük harfli kayıt ve dosya okuma için ayrı testler ekleyin. Gerçek günlük dosyalarıyla çalışırken erişim izinlerini ve hassas veri içeriğini de dikkate alın.
Yavaşlığı tahmin etmek yerine ölçün
Program doğru çalışıyor ama beklenenden uzun sürüyorsa, önce aynı girdiyle çalıştırma süresini gözlemleyin. Ardından uygun bir test verisiyle
python -m cProfile -s cumulative script.py komutunu çalıştırın; script.py yerine kendi dosyanızı yazın ve gerekiyorsa programın argümanlarını ekleyin. Program bu işlem sırasında gerçekten çalışır; dosya silme veya sunucuya yazma gibi yan etkileri varsa güvenli bir test ortamı kullanın.Profil çıktısı hangi işlevlerde zaman biriktiğini göstererek inceleme için başlangıç noktası sunar; tek başına yavaşlığın nedenini kanıtlamaz. En çok zaman alan ilgili bölümü inceleyin, bir değişiklik yapın ve aynı koşullarda yeniden ölçün. Süre düzelmediyse varsayımı değiştirip örneğin dosya erişimi veya ağ beklemesi gibi başka etkenleri araştırın.