🧾Fonksiyon Süresini ve Çağırıldığı Yeri Dekoratör ile Raporlama
Bu blog yazısında, Python ile bir fonksiyonun süresini ve çağırıldığı yeri nasıl raporlayacağımızı anlatacağım. Örnekte self içeren bir fonksiyonu ve logger objesini kullanacağız.
📚 Yukarıdaki paketler Python'ın standard kütüphanesinden geliyor.
functools
modülününwraps
fonksiyonu, dekoratörlerde kullanılır ve orijinal fonksiyonun adını, docstring'ini vb. korur.time
modülününtime
fonksiyonu, çağrıldığı anın zamanını verir.traceback
modülününextract_stack
fonksiyonu, fonksiyon çağrılarının izini çıkarır.typing
modülününAny
türü, herhangi bir türü temsil eder ve dinamik tiplendirme esnekliği sağlar.
🛠️ self_logging
adında bir dekoratör fonksiyon tanımlıyoruz. Bu dekoratör, hedef fonksiyonu parametre olarak alır.
📦 wraps
fonksiyonu dekoratörlere eklenir ve hedef fonksiyonun meta verilerini (örneğin: ismi, docstring'i) korur.
🧩 wrapper
adında bir iç fonksiyon tanımlıyoruz. Bu fonksiyon, hedef fonksiyonun parametrelerini dinamik bir şekilde kabul edebilir.
⌚ İşlemin başlangıç zamanını kaydediyoruz. Bunu daha sonra işlemin ne kadar sürdüğünü hesaplamak için kullanacağız.
📜 logger
objesini kullanarak hedef fonksiyonun çağrıldığı y
eri ve kullanılan parametreleri logluyoruz. Burada extract_stack()[-2].name
ifadesi ile fonksiyonun çağrıldığı yerin ismini alıyoruz.
🎯 Hedef fonksiyonu çağırıyoruz ve dönen sonucu result
değişkeninde saklıyoruz.
⏲️ İşlemin tamamlanma süresini hesaplayıp logluyoruz. Hesaplamak için başlangıç zamanını şimdiki zamandan çıkarıyoruz.
🔄 Hedef fonksiyonun sonucunu dönüyoruz. Dekoratör, hedef fonksiyonun sonucunu etkilememeli.
🎁 self_logging
fonksiyonu olarak wrapper
fonksiyonunu dönüyoruz. Böylece dekoratör, hedef fonksiyon yerine wrapper
fonksiyonunu çağıracak.
Bu kod örneği, Python'daki dekoratörlerin, asenkron işlemlerin ve loglamanın nasıl kullanılabileceğini gösterir. Aynı zamanda fonksiyonun çağrıldığı yerin izini sürme ve geçen zamanı ölçme yeteneği de sağlar. Bu yetenekler, özellikle büyük ve karmaşık yazılım projelerinde çok değerlidir. Bu tür projelerde hataların nereden kaynaklandığını belirlemek ve performans darboğazlarını tespit etmek için bu tür bilgiler hayati öneme sahiptir.
Last updated