Cython ile daha hızlı Python

Cython; basit olarak Python için C genişletmeleri(extension) yazmamızı sağlayan bir programlama dilidir. Bunu, Python söz dizimi ile C fonksiyonları ve değişkenler üzerinde tip(static type) belirtmemizi sağlayarak yapar, bu şekilde oluşturduğu C kodunu da bir Python extension’ı olarak çalıştırarak Python içerisinde kullanabileceğimiz C hızında fonksiyonlar elde ederiz.

Anaconda kullanıyorsanız Cython kurulu olacaktır sisteminizde, güncellemesine bakmanızda fayda var. Eğer Anaconda kullanmıyorsanız işletim sisteminize göre kurulum işlemleri değişiklik gösterecektir. PIP üzerinde basitçe “pip install Cython” komutuyla kurabilirsiniz. Bir sorun yaşarsanız resmi sayfasına buradan bakabilirsiniz.

Python’un aksine Cython’u kullanabilmek için önce bir derleme aşamasından geçmesi gerekli. Bu aşamada önce kodumuz C’ye çevrilecek ve daha sonra Python uzantısı haline getirilecek.

İlk Cython kodumuzu yazabiliriz. IPython üzerinde çalışan Spyder(Jupyter ile de sorunsuz çalışacaktır) ile Python 3.6 ortamında bu denemeyi yaptım. Anaconda ile kurulu geldiği için bir Cython kurulumu yapmadım.

IPython’a Cython eklentisini yüklemesi için “%load_ext Cython” komutu çalıştırıyoruz. Bunun sayesinde %%cython magic’ini kullanabileceğiz.

Daha sonra aşağıdaki kodu çalıştırarak C ile yazılmış Python içerisinde kullanabileceğimiz bir fonksiyon oluşturmuş oluyoruz.

%%cython
def selam_ver(isim):
    print("Selam %s!" % isim)

%%cython; bu satır kodumuzun ilk satırı olmalı, bunun sayesinde kodumuzu ayrı bir dosyada yazıp komut satırı ile derleme zahmetinden kurtuluyoruz. Bu ve buna benzer bir çok kullanışlı IPython sihirli fonksiyonlarına şuradan bakılabilir.

Daha sonra bu fonksiyonumuzu normal bir Python fonksiyonu gibi kullanabiliriz.

selam_ver("Erdoğan")
# Selam Erdoğan

unable to find vcvarsall.bat hatası;
Cython’un kullandığı bir dosyaymış ve sadece Cython ile değil birkaç Python paketiyle de sorun çıkarmasıyla meşhur. Python’un belirttiğine göre; bazı paketlerde ve Cython ya da Pyrex dosyalarını derlemede C++ derleyicilerine ihtiyaç duyarız. vcvarsall.bat dosyası da bu derleme işlemlerinde kullanılan bir dosya. Bu dosya nereden geliyor peki? Python versiyonunuza göre uydurmanız gereken Visual Studio Build Tools paketinden bu dosyamız çıkacaktır.
Python 3.6 için Microsoft Build Tools for Visual Studio 2017 kurmam gerekiyor ve şu linkten indirip kurduktan sonra IPython’ı tekrar başlatarak yeniden denediğimde sorun gitmişti. (Linkte Türkçe olarak “Visual Studio 2017 için Derleme Araçları” yazabilir)

Tabi ki bu örnek Cython’un katkısını görmek için yetersiz. Bu konuda en iyi örneği Pandas bize sunmuş. Pandas için C Eklentileri Yazma başlığıyla verdiği bu örnekte saf Python ile 174 milisaniye süren bir işlemi 987 mikrosaniyeye düşürebilmiş. 175 katı bir hızlanma ile Cython’un çok başarılı bir şekilde kullanabilmişler.


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir