Zephyrnet Logosu

Python'da Bellek Profil Oluşturmaya Giriş – KDnuggets

Tarih:

Python'da Bellek Profil Oluşturmaya Giriş
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 ve str2 ve bunları birleştirir. 
  • Anahtar kelime argümanı reps oluşturmak için sabit kodlanmış dizelerin kaç kez tekrarlanacağını kontrol eder str1 ve str2. 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: 

 

Python'da Bellek Profil Oluşturmaya Giriş
 

Çı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.

 

Python'da Bellek Profil Oluşturmaya Giriş

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.

 

Python'da Bellek Profil Oluşturmaya Giriş
 

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:

 

Python'da Bellek Profil Oluşturmaya Giriş

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.

spot_img

En Son İstihbarat

spot_img