İbrahim Halil Sezgin
İleri Düzey Python Performans İpuçları: Hızlandırma ve Hafıza Yönetimi - İbrahim Halil Sezgin

İleri Düzey Python Performans İpuçları: Hızlandırma ve Hafıza Yönetimi

İleri Düzey Python Performans İpuçları: Hızlandırma ve Hafıza Yönetimi

Python, kullanıcı dostu sözdizimiyle hatırlanır. Ancak büyük ölçekli veri işleme ya da sistem performansı kritik olduğunda performans sorunlarının farkında olmak gerekir. Bu yazıda, Python kodlarınızı gözden geçirmeniz, bellek kullanımını optimize etmeniz ve çalışma zamanını hızlandırmanız için uygulanabilir teknikleri ele alacağız.

1. Doğru Veri Yapılarını Kullanma

  • Liste vs. Tuple: tuple’lar değiştirilemez nesneler olduğundan vakti kısaltır ve bellek oturumu düşürür. Sürekli değişmeyen dizilerde liste yerine tuple tercih edin.
  • Diz (numpy.ndarray): Sayısal hesaplamalarda list yerine numpy dizileri kullanmak, satır bazlı işlemlerde sayı katı hızlanma sağlar.

2. Zaman Kısıtlayıcı Operasyonları İyileştirme

Python’da kod bloklarının çalışma süresini ölçmek için timeit modülü kullanılır. Kodunuzu aşağıdaki gibi test edin:

import timeit
print(timeit.timeit(''.join([str(i) for i in range(1000)]), number=100))

İşlemleri bölerek en yavaş parçayı tespit edin ve optimize edin.

3. Lamba ve Map’in İpuçları

Lamba fonksiyonları hızlı işlevler gerektiren durumlar için uygundur, fakat map ile kombinlenmente kullanıldığında fark edilebilir performans artışı elde edilir. Örnek:

numbers = range(1, 1000000)
result = sum(map(lambda x: x * 2, numbers))

4. Bellek Yönetimi: GC ve Nesne Oluşturma

Garbage Collector (GC) bellek sızıntıları önler fakat aşırı kullanım CPU tüketir. Büyük nesne dizileri oluştururken, del ile referansları temizlemek ve yerel değişkenleri possibly __slots__ ile sınırlamak yararlıdır.

Örnek:

class Point:
    __slots__ = ('x', 'y')
    def __init__(self, x, y):
        self.x = x
        self.y = y

5. Döngü Optimizasyonları

Döngülerde kullanılan fonksiyon çağrılarını minimize etmeye özen gösterin. Örneğin

for i in range(size):
    val = heavy_function(i)
    results.append(val)

bunu

results = [heavy_function(i) for i in range(size)]

şeklini kullanmak hem okunabilirliği artırır hem de sık arama ve ekleme işlemlerini azaltır.

6. Profil Oluşturma ve Analiz

cProfile ve line_profiler gibi araçlarla kodunuzu profil ile inceleyerek başlıkta geçen optimizasyonlarınızı test edebilirsiniz. Profil çıktısında verilen cumtime ve mrss değerlerine bakarak bellek kullanımı ve CPU süresi yönelimlerinizi ayarlayın.

7. Çoklu İş Parçacığı (Thread) ve Çoklu İşlem (Process)

CPU‑intensive görevler için multiprocessing kütüphanesi ile çoklu çekirdek yakından kullanın. Örnek:

from multiprocessing import Pool

def worker(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as p:
        print(p.map(worker, range(10)))

Açıklayıcı ToDo : Her proje için profiling yol haritası oluşturarak hangi kritik noktalara odaklanılacağını belirleyin.

Sonuç

Python, bazı ek çalıştaylarla gerçek dünya ortamlarda 3-5 kat hız kazanabilir. Veri yapıları doğru seçilir, bellek yönetimi ve döngüler optimize edilirse, kodunuz hem daha okunur hem de daha hızlı olur. Ancak her optimizasyon, kodunuzun fonksiyonel gereksinimleriyle dengelenmelidir; aşırı mikro optimizasyon yapmadan önce test ve profil yardımıyla etkisi ölçülmelidir.

17 Kasım 2025 20:14