Python Generators & Yield: Bellek Dostu Veri Akışı
10 milyon satırlık veriyi RAM'e tek seferde yüklemeden yudum yudum işleme sanatı.
Baraj kapağını aniden açıp şehri su altında bırakmak yerine (List), musluğu açıp ihtiyacın kadar su bardağını doldurmaktır (Generator).
Normal fonksiyonlar "return" ile tüm sonucu hesaplayıp döner ve belleği tüketir. Generator ise "yield" kullanarak her çağrıldığında bir sonraki değeri hesaplar, durumunu (state) dondurur ve bellekte sadece o anki elemanı tutar (Lazy Evaluation).
“Generator'lar Python'da Iterator protokolünü uygulayan özel fonksiyonlardır. range() fonksiyonu da bir generator mantığıyla çalışır. GB boyutundaki CSV veya log dosyalarını satır satır okurken RAM tüketimini megabyte seviyesinde sabit tutarlar.”
def read_huge_file(file_path):
with open(file_path, 'r') as f:
for line in f:
yield line.strip() # Sadece 1 satır bellekte tutulur!
# 10 GB dosya okunurken bile RAM artmaz:
for line in read_huge_file('huge_log.txt'):
process(line)
Bir generator'ı [x for x in my_generator()] diyerek tekrar listeye çevirip tüm bellek avantajını yok etmek.