Python Kodunuzu Daha Hızlı Çalıştırın! PyPy: Hız Tutkunları için Python’ın Cazip Alternatifi

Fethi Tekyaygil
FinSwipe TR
Published in
4 min readSep 14, 2023

Hepinize merhabalar, yine bir makale ile karşınızdayım.

Makaleler arası uzun sürmesinin sebebi yazacak şey bulamadığımdan değil, iş ve hayat dengemin çok dengesiz oluşundan ve iş yoğunluğundan kaynaklı. Beni takip edenleriniz varsa daha yeni FinSwipe adı verdiğimiz bir şirketin kurucu ortağı olduğumu bilirler. Ve inanın bana, uzaktan göründüğü kadar kolay ve acısız değilmiş :)

Konumuza gelecek olursak, profesyonel iş hayatımda her ne kadar C# .NET ile kodluyor olursam olayım işimdeki bazı çözümler için Python’ı tercih ediyorum. Bu vesileyle ana işimi yaparken Python’dan geri kalmayarak kendimi güncel tutuyorum (hayır maalesef mikroservis yazmıyorum :) )

Bu zamana kadar ben dahil hemen hemen bir çok geliştirici Python kodlarının daha hızlı çalışması için çeşitli yöntemlere başvurmuştur. Evet evet biliyorum Python güçlü, esnek ve kullanımı kolay olmasıyla ün kazandı ancak hepimiz biliyoruz ki Python her zaman C veya C++ gibi makineye özgü dillerden çok daha yavaş.

Peki bunun için neler yapıldı? Veya neler yapılabilirdi?

Performans gerektiren işleri C kodunda yazıp C kodunu Python ile sarabilirdiniz (evet wrap olan) veya Cython kullanabilirdiniz. Ancak bunlar geçici çözümler ve geçici çözümler asla ideal değildir çünkü yarın kalıcılığının garantisi çok yoktur.

Peki size daha kalıcı bir çözüm var desem? Python kodunu bu tür atlamalara maruz bırakmadan olduğu gibi hızlıca çalıştırabilirsinzi desem ne derdiniz?

İşte PyPy tam olarak bunu yapıyor.

PyPy vs Cython

Gelelim PyPy’ı bilmeyen geliştiricilerin hız anlamındaki kahramanı olan Cython’ın yeni kahramanımız olan PyPy ile olan karşılaştırmasına. Öncelikle kafanızda neden PyPy kullanmalıyım mis gibi Cython var diyebilirsiniz. Gelin bunu madde madde yazalım:

  1. PyPy, Python kodunu çevirici (Python topluluğunda “JIT” olarak bilinir) bir alternatif olan bir Python uygulama sunucusudur. PyPy, Python kodunu yürütürken Just-In-Time derlemesi kullanır. Bu, kodun çalışma sırasında optimize edilmesi anlamına gelir, bu da genellikle daha hızlı çalışmasını sağlar. Ancak Cython, Python kodunu C ve C++ diline derlemek için bir dil uzantısıdır. Bu nedenle, Python kodunu önceden derler ve sonuçta C veya C++ kodu elde edersiniz. Bu, Cython ile yazılmış programların genellikle daha hızlı çalışmasını sağlar
  2. PyPy, Python’un kendisiyle uyumlu olduğu için Python kodunu doğrudan çalıştırabilir. Python 2.x ve Python 3.x sürümleriyle uyumludur. Cython, Python’un bazı özelliklerini ve kütüphanelerini destekler, ancak aynı zamanda C dilinin özelliklerini de kullanabilir. Bu, Cython ile daha fazla kontrol sağlar, ancak Python kodunu daha fazla C tarzı kodla karmaşıklıklaştırabilir
  3. PyPy, Python kodunu daha hızlı çalıştırabilir, ancak bu hız artışı, işlemci mimarisi ve kodun karmaşıklığına bağlı olarak değişebilir. Genellikle birçok Python kodu için iyi bir hız artışı sağlar. Cython, Python kodunu C veya C++ koduna derlediği için daha düşük seviyeli bir hız artışı sağlar. Bir yandan da bu, Cython ile kodun optimize edilmesi gerektiği anlamına gelir
  4. Genellikle Python uygulamalarının hızını artırmak ve Python kodunu daha performanslı hale getirmek için kullanılır. Daha düşük seviyeli kontrol gerektiren ve Python kodunu C veya C++ ile entegre etmek isteyen geliştiriciler için daha uygundur

PyPy Nasıl Çalışır?

  1. Python Kodu Yürütme: Bir Python programı çalıştırıldığında, Python yürütme ortamı Python kodunu yorumlar ve işler. Bu, Python kodunun yavaş çalışmasına neden olan bir faktördür, çünkü her satır kod yorumlanır ve yürütülür.
  2. PyPy Yürütme Ortamı: PyPy, Python kodunu yorumlamak yerine özel bir Python yürütme ortamı sunar. Bu yürütme ortamı, Python kodunu yürütmek için Just-In-Time derleme (JIT) yöntemini kullanır.
  3. JIT Derlemesi: PyPy, Python kodunu yürütmek için JIT derlemesi kullanır. Bu, Python kodunun çalışma sırasında optimize edilmesi anlamına gelir. PyPy, Python kodunu anlık olarak bir ara dil olarak adlandırılan “RPython” (Restricted Python) koduna çevirir. RPython daha sonra platforma özgü makine koduna derlenir.
  4. Optimizasyonlar: JIT derlemesi sırasında, PyPy çeşitli optimizasyon tekniklerini kullanarak Python kodunu hızlandırır. Bu, gereksiz işlemlerin atlanması, yerel veri türlerinin kullanılması ve döngülerin hızlandırılması gibi işlemleri içerir.
  5. Hızlı Yürütme: JIT derlemesi sonucunda oluşturulan makine kodu daha hızlı bir şekilde çalıştırılır. Bu, Python kodunun daha verimli bir şekilde çalışmasını sağlar ve genellikle performansın artmasına yol açar.

PyPy’ı Kurma

PyPy’ı kullanabilmek için öncelikle sistemimize kurmamız gerekiyor. Bunun için https://www.pypy.org/download.html adresine gidip sisteminize en uygun versiyonu indirin.

İnen zip dosyasını bilgisayarınızda herhangi bir yere çıkarın. Ben Windows kullanıyorum ve C:\ sürücüsünün altına pypy ismiyle çıkardım.

Sonrasında ortam değişkenlerine gibi PATH içerisine klasör yolunu ekleyin:

C:\pypy

Artık terminalinizde pypy kullanabilirsiniz.

Ellerimizi Kirletelim

Bahsettiğimiz farkı görebilmek için bir Python scripti yazalım ve bu scripti klasik Python ve PyPy ile çalıştıralım. main.py isimli bir dosya oluşturup içine aşağıdaki gibi bir Python scripti yazdım:

import timeit

def test_code():
total = 0
for i in range(1000000):
total += i
return total

code_time = timeit.timeit(test_code, number=100)


print(f"Kod Çalışma Süresi: {code_time:.4f} saniye")

Kodumu öncelikle Python ile çalıştırıyorum ve çıktıma bakıyorum:

Sıra kahramanımız PyPy’da:

Visual Studio içindeki terminalde pypy görünmediği için Windows’un terminalinde kodu çalıştırdım. 4 kata yakın bir hız farkı ortaya çıktı. Aradaki zaman farkını siz de kendi bilgisayarınızda denediğinizde göreceksiniz.

SONUÇ

Bugün Python kodlarımızı PyPy ile çalıştırmanın standart Python komutu ile çalıştırmadan daha hızlı olduğunu gördük. Sonraki yazımın konusunun ne olması istediğinizi yoruma yazarsanız o konu ile alakalı bir makale yazabilirim. Bu makaleyi sıkılmadan okuduğunuz için teşekkürler, sonraki yazımda görüşmek üzere :)

--

--

Fethi Tekyaygil
FinSwipe TR

.NET Core Backend & Google Certified Tensorflow Developer — Flutter & Solidity Padawan — Animal Person