Rust ve PyO3: Python İçin Rust Modülleri Yazmak

  • 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'un kullanım kolaylığı ve zengin kütüphane ekosistemi ile Rust'ın yüksek performansı ve bellek güvenliğini birleştirmek isterseniz, PyO3 bu işin anahtarıdır. PyO3, Python için yerel (native) Rust eklentileri yazmanızı veya Rust içinden Python kodunu çağırmanızı sağlayan bir köprüdür.
Özellikle Python'da yavaş çalışan veri işleme, matematiksel hesaplama veya karmaşık algoritma kısımlarını Rust ile yazıp Python'da bir paket gibi kullanmak, performans darboğazlarını aşmanın en modern yoludur.

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

PyO3, Rust kodunuzu Python'un C-API'sine bağlar. Python, Rust tarafından üretilen kütüphaneyi sanki bir C eklentisiymiş gibi görür. Ancak geliştirici için C ile uğraşmak yerine Rust'ın güvenli dünyasında kalmak büyük bir avantajdır.

2. Proje Kurulumu ve Matur​

PyO3 projelerini yönetmek için genellikle Maturin kullanılır. Maturin, Rust projelerini Python paketlerine dönüştüren bir derleme aracıdır.
Kurulum:
Bash

Kod:
pip install maturin
maturin init  # Proje şablonunu oluşturur
Cargo.toml dosyanızda şu bağımlılıklar yer almalıdır:
Kod:
 [lib] name = "rust_modulum" crate-type = ["cdylib"] # C-uyumlu dinamik kütüphane
[dependencies.pyo3] version = "0.20" features = ["extension-module"]

3. İlk Rust Modülünüzü Yazmak​

Rust tarafında bir fonksiyon yazıp bunu Python'a nasıl ihraç edeceğimize bakalım.
Kod:
 use pyo3::prelude::*;
/// İki sayıyı toplayan ve Python'dan çağrılabilen fonksiyon #[pyfunction] fn topla(a: i64, b: i64) -> PyResult<i64> { Ok(a + b) }
/// Python modülünün tanımı #[pymodule] fn rust_modulum(_py: Python, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(topla, m)?)?; Ok(()) }
Bu kodu maturin develop komutuyla derlediğinizde, Python içinde şu şekilde kullanabilirsiniz:
Python:
 import rust_modulum sonuc = rust_modulum.topla(10, 20) print(f"Rust'tan gelen sonuç: {sonuc}")

4. Tip Dönüşümleri (Type Mapping)​

PyO3, Rust ve Python arasındaki tipleri otomatik olarak eşleştirir. Bu sayede karmaşık veri yapılarını taşımak oldukça kolaydır.
Python TipiRust Tipi
inti32, u32, i64 vb.
floatf32, f64
strString, &str
listVec<T>
dictHashMap<K, V>
NoneOption<T>

5. GIL (Global Interpreter Lock) Yönetimi​

Python'un meşhur GIL mekanizması, çoklu iş parçacığı kullanımını kısıtlar. Rust tarafında yoğun bir hesaplama yaparken GIL'i serbest bırakarak (release), Python'un diğer işleri yapmaya devam etmesini sağlayabilirsiniz. Bu, paralel programlama için kritik bir özelliktir.

Kod:
py.allow_threads(|| {// Burada yapılan ağır hesaplamalar Python'un GIL kilidini engellemez.});


6. Performans: Ne Zaman Kullanmalı?​

Python kodunuzu Rust'a taşımak her zaman mucize yaratmaz. Küçük işlemler için Python ve Rust arasındaki veri taşıma maliyeti (overhead), kazandığınız hızdan daha fazla olabilir. Ancak şu durumlarda Rust ve PyO3 rakipsizdir:

  • Yoğun Döngüler: Milyonlarca kez dönen matematiksel işlemler.
  • Bellek Yönetimi: Büyük verilerin (Big Data) bellekte verimli tutulması.
  • Paralelleştirme: Python'un kısıtlı kaldığı çok çekirdekli işlemler.

Özet​

PyO3, Python'un hızı ile Rust'ın gücünü birleştiren bir köprüdür. Mevcut Python projelerinizi tamamen silip atmak yerine, sadece darboğaz yaratan kısımları Rust ile "turbo" moduna geçirebilirsiniz.
 
Geri
Üst