PyO3: Python Uygulamalarınızı Rust ile Hızlandırın

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Python'ın esnekliği ve geniş kütüphane ekosistemi harikadır, ancak yoğun hesaplama gerektiren işlerde (veri işleme, kriptografi, karmaşık algoritmalar) yavaş kalabilir. PyO3, bu darboğazı aşmak için Python ve Rust arasında yüksek performanslı bir köprü kuran en popüler kütüphanedir.
PyO3 sayesinde Python ile yazılmış bir projeyi tamamen çöpe atmak yerine, sadece yavaş çalışan kısımları Rust ile yazıp bir Python modülü (.so veya .pyd) olarak içeri aktarabilirsiniz.

1. PyO3 Nasıl Çalışır?​

PyO3, Rust kodunuzu Python yorumlayıcısının (CPython) anlayabileceği bir C genişletmesine dönüştürür. Rust'ın sahiplik (ownership) modelini Python'ın referans sayımı (reference counting) ile güvenli bir şekilde eşleştirir.

2. Basit Bir Örnek: Rust Fonksiyonunu Python'a Taşımak​

Bir Rust fonksiyonunu Python'dan çağrılabilir hale getirmek için #[pyfunction] ve #[pymodule] niteliklerini (attributes) kullanırız.
Rust Tarafı (src/lib.rs):
Rust

Kod:
use pyo3::prelude::*;

/// İki sayıyı toplayan yoğun hesaplama simülasyonu
#[pyfunction]
fn topla_hizli(a: i64, b: i64) -> PyResult<i64> {
    Ok(a + b)
}

/// Python modülünü tanımlıyoruz
#[pymodule]
fn benim_kutuphanem(_py: Python, m: &PyModule) -> PyResult<()> {
    m.add_function(wrap_pyfunction!(topla_hizli, m)?)?;
    Ok(())
}

3. Maturin: Paketleme Sihirbazı​

PyO3 ile yazdığınız kodu Python'da pip install ile yüklenebilir bir paket haline getirmek için Maturin aracını kullanırız.
  • maturin develop: Rust kodunu derler ve mevcut Python ortamınıza bir modül olarak anında yükler.
  • maturin build: Dağıtılabilir .whl (wheel) dosyaları oluşturur.

4. Performans Karşılaştırması​

Neden Python yerine Rust kullanmalısınız? İşte tipik bir senaryoda (örneğin ağır bir döngü veya matematiksel işlem) beklenen fark:
İşlemPython (Native)Rust (via PyO3)Fark
Fibonacci (n=40)~25.4 sn~0.4 sn~60x Daha Hızlı
JSON İşlemeOrtaÇok Hızlı~5-10x Daha Hızlı
Bellek KullanımıYüksekDüşükDaha Verimli

5. GIL (Global Interpreter Lock) ve Paralellik​

Python'ın en büyük kısıtlamalarından biri olan GIL, aynı anda sadece bir thread'in Python bytecode çalıştırmasına izin verir.

PyO3'ün Süper Gücü: Rust tarafında ağır bir işlem yaparken py.allow_threads(|| { ... }) bloğunu kullanarak GIL'i serbest bırakabilir ve Rust'ın gerçek çok çekirdekli (multi-core) performansından yararlanabilirsiniz. Bu, Python'ın normalde yapamadığı gerçek paralelliği sağlar.


Özet​

PyO3 kullanmak için şu adımları takip edersiniz:

  1. Cargo.toml'a pyo3 bağımlılığını ekle.
  2. Rust fonksiyonlarını #[pyfunction] ile işaretle.
  3. maturin develop komutuyla modülü oluştur.
  4. Python içinde import benim_kutuphanem diyerek kullanmaya başla.
 
Geri
Üst