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.
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.list yerine numpy dizileri kullanmak, satır bazlı işlemlerde sayı katı hızlanma sağlar. 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.
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))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 = yDö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.
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.
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.
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.