Yazara göre resim
Python kodunun profilini çıkarmak, kodun nasıl çalıştığını anlamak ve optimizasyon fırsatlarını belirlemek için faydalıdır. Muhtemelen Python komut dosyalarınızın profilini çıkarmışsınızdır. zamanla ilgili ölçümler— kodun belirli bölümlerinin yürütme sürelerinin ölçülmesi.
Ancak bellek için profil oluşturma (yürütme sırasında bellek tahsisini ve tahsisin kaldırılmasını anlamak için) de aynı derecede önemlidir. Çünkü bellek profili oluşturma, bellek sızıntılarının, kaynak kullanımının ve ölçeklendirmeyle ilgili olası sorunların belirlenmesine yardımcı olabilir.
Bu eğitimde, Python paketini kullanarak bellek kullanımı için Python kodunun profilini çıkarmayı inceleyeceğiz bellek profili oluşturucu.
Pip kullanarak bellek profil oluşturucu Python paketini yükleyerek başlayalım:
pip3 install memory-profiler
not: Bellek profil oluşturucuyu özel bir yere yükleyin sanal çevre küresel ortamınız yerine proje için. Ayrıca bellek kullanımını çizmek için bellek profil oluşturucudaki çizim yeteneklerini de kullanacağız. matplotlib. Bu nedenle projenin sanal ortamında matplotlib'in de kurulu olduğundan emin olun.
Fonksiyonlu bir Python betiği (main.py diyelim) oluşturalım process_strs
:
- İşlev iki süper uzun Python dizisi oluşturur
str1
vestr2
ve bunları birleştirir. - Anahtar kelime argümanı
reps
oluşturmak için sabit kodlanmış dizelerin kaç kez tekrarlanacağını kontrol ederstr1
vestr2
. Ve çağrılan fonksiyonun değerini belirtmemesi durumunda kullanılacak olan 10**6 varsayılan değerini veriyoruz.reps
. - Daha sonra açıkça sileriz
str2
. - İşlev birleştirilmiş dizeyi döndürür
str3
.
# main.py
from memory_profiler import profile
@profile
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
Komut dosyasını çalıştırmak size benzer bir çıktı vermelidir:
Çıktıda görüldüğü gibi, kullanılan belleği, sonraki her dize oluşturma işlemindeki artışı ve kullanılan belleğin bir kısmını serbest bırakan dize silme adımını görebiliyoruz.
mprof komutunu çalıştırma
Yukarıda gösterildiği gibi Python betiğini çalıştırmak yerine, aşağıdaki komutu da çalıştırabilirsiniz: mprof
şöyle komut verin:
mprof run --python main.py
Bu komutu çalıştırdığınızda, bellek kullanım verilerini içeren bir .dat dosyasını da görebilmeniz gerekir. Her çalıştırdığınızda bir .dat dosyanız olur. mprof
komut — zaman damgasıyla tanımlanır.
Bellek Kullanımının Çizilmesi
Bazen bellek kullanımını sayılara bakmak yerine bir grafikten analiz etmek daha kolaydır. Matplotlib'in çizim yeteneklerini kullanmak için gerekli bir bağımlılık olduğunu tartıştığımızı unutmayın.
Sen kullanabilirsiniz mprof plot
Verileri .dat dosyasına çizme ve bir görüntü dosyasına kaydetme komutu (burada çıktı.png):
mprof plot -o output.png
Varsayılan olarak, mprof plot
en son çalıştırmanın verilerini kullandı mprof
Komut.
Grafikte belirtilen zaman damgalarını da görebilirsiniz.
Bellek Kullanım Profilinin Günlük Dosyasına Kaydedilmesi
Alternatif olarak, bellek kullanım istatistiklerini çalışma dizinindeki tercih edilen bir günlük dosyasına kaydedebilirsiniz. Burada bir dosya işleyicisi oluşturuyoruz mem_logs
günlük dosyasına gidin ve stream
argüman @profile
dekoratörden dosya işleyicisine:
# main.py
from memory_profiler import profile
mem_logs = open('mem_profile.log','a')
@profile(stream=mem_logs)
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
Şimdi betiği çalıştırdığınızda, çalışma dizininizde aşağıdaki içeriğe sahip mem_profile.log dosyasını görebilmeniz gerekir:
Ayrıca kullanabilirsiniz memory_usage()
belirli bir işlevin yürütülmesi için gereken kaynakları anlamak için işlev; düzenli zaman aralıklarında örneklenir.
The memory_usage
işlev, işlevi profil, konumsal ve anahtar kelime argümanlarına bir tuple olarak alır.
Burada hafıza kullanımını bulmak istiyoruz. process_strs
anahtar kelime argümanıyla işlev reps
10**7 olarak ayarlayın. Ayrıca örnekleme aralığını 0.1 saniyeye ayarladık:
# main.py
from memory_profiler import memory_usage
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
mem_used = memory_usage((process_strs,(),{'reps':10**7}),interval=0.1)
print(mem_used)
İşte ilgili çıktı:
Output >>>
[21.21875, 21.71875, 147.34375, 277.84375, 173.93359375]
Bellek kullanımının ne sıklıkla yakalanmasını istediğinize bağlı olarak örnekleme aralığını da ayarlayabilirsiniz. Örnek olarak aralığı 0.01 saniyeye ayarladık; yani artık kullanılan hafızanın daha ayrıntılı bir görünümünü elde edeceğiz.
# main.py
from memory_profiler import memory_usage
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
mem_used = memory_usage((process_strs,(),{'reps':10**7}),interval=0.01)
print(mem_used)
Benzer bir çıktı görebilmeniz gerekir:
Output >>>
[21.40234375, 21.90234375, 33.90234375, 46.40234375, 59.77734375, 72.90234375, 85.65234375, 98.40234375, 112.65234375, 127.02734375, 141.27734375, 155.65234375, 169.77734375, 184.02734375, 198.27734375, 212.52734375, 226.65234375, 240.40234375, 253.77734375, 266.52734375, 279.90234375, 293.65234375, 307.40234375, 321.27734375, 227.71875, 174.1171875]
Bu eğitimde, bellek kullanımı için Python komut dosyalarının profilini çıkarmaya nasıl başlayacağımızı öğrendik.
Özellikle, bunu Memory-Profiler paketini kullanarak nasıl yapacağımızı öğrendik. Biz kullandık @profile
dekoratör ve memory_usage()
Örnek bir Python betiğinin bellek kullanımını almak için işlev. Ayrıca bellek kullanımını çizme ve istatistikleri bir günlük dosyasına kaydetme gibi yetenekleri nasıl kullanacağımızı da öğrendik.
Yürütme süreleri için Python betiğinizin profilini çıkarmakla ilgileniyorsanız, okumayı düşünün Timeit ve cProfile Kullanarak Python Kodunun Profilini Oluşturma.
Bala Priya C Hindistan'dan bir geliştirici ve teknik yazardır. Matematik, programlama, veri bilimi ve içerik oluşturmanın kesiştiği noktada çalışmayı seviyor. İlgi ve uzmanlık alanları DevOps, veri bilimi ve doğal dil işlemeyi içerir. Okumaktan, yazmaktan, kodlama yapmaktan ve kahve içmekten hoşlanıyor! Şu anda öğreticiler, nasıl yapılır kılavuzları, fikir yazıları ve daha fazlasını yazarak öğrenmek ve bilgisini geliştirici topluluğuyla paylaşmak için çalışıyor.
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- PlatoData.Network Dikey Üretken Yapay Zeka. Kendine güç ver. Buradan Erişin.
- PlatoAiStream. Web3 Zekası. Bilgi Genişletildi. Buradan Erişin.
- PlatoESG. karbon, temiz teknoloji, Enerji, Çevre, Güneş, Atık Yönetimi. Buradan Erişin.
- PlatoSağlık. Biyoteknoloji ve Klinik Araştırmalar Zekası. Buradan Erişin.
- Kaynak: https://www.kdnuggets.com/introduction-to-memory-profiling-in-python?utm_source=rss&utm_medium=rss&utm_campaign=introduction-to-memory-profiling-in-python