SORU
19 Ocak 2009, PAZARTESİ


Python genişletme - yudum yudum ya da Cython için değil

Python kodum, psikopat vs. ile yaklaşık oynadı darboğaz buldum. O zaman performans için c/c uzantısı yazmaya karar verdim.

Yudum yardımıyla neredeyse tartışmalar vs. hakkında bakım gerekmez. Her şey gayet iyi çalışıyor.

Şimdi sorum şu: yudum oldukça büyük bir yeri yok ki py dosyası oluşturur 'kontrolleri' 'PySwigObject' gerçek çağırmadan önce .pyd ya .kod.

Eğer el-yazma kazanmak için biraz daha fazla performans olup olmadığını herhangi bir deneyime sahip olan herkes bu dosya veya yudum yapalım.

CEVAP
19 Ocak 2009, PAZARTESİ


Boost göz önünde bulundurmalısınız.Eğer diğer diller için bağlantıları oluşturmak için planlıyorsanız değil Python ile yudum.

Eğer bağlama harika bir araçtır işlevleri ve sınıfları bir sürü varsa, otomatik olarak bu bağlantıları yapmak için gerekli kodu oluşturur.

Pybindgen de bir seçenek olabilir, ama daha az tam yeni bir projeye Destek oldu.Python.


Düzenleme:

Belki pro ve eksileri hakkında daha açık olmak istiyorum.

  • Yudum:

    artılar: betik dilleri. çok bağlar oluşturabilirsiniz

    eksileri: çözümleyici çalışma şeklini beğenmedim. Eğer bazı ilerlemeler bilmiyorum ama iki yıl önce C ayrıştırıcı oldukça sınırlıydı. Çoğu zaman geçmişimi/kopya zorunda kaldım .h başlıkları % bazı karakterler eklemek ve yudum çözümleyici için ilave ipuçları verir.

    Ayrıca Python ile başa çıkmak için C-API (çok değil) karmaşık türü için zaman zaman dönüşümler gerekiyordu.

    Artık kullanmıyorum.

  • Boost.Python:

    artılar: Çok tam bir kütüphane. C-API ile mümkün, ama C olan hemen her şeyi yapmak için izin verir . Hiç C-API kodu bu kütüphane ile yazmak zorunda kaldım. Ben de hiç hata kütüphaneye nedeniyle karşılaştı. Bağlamaları için bir kod ya da bir cazibe gibi çalışır ya da derleme reddediyorum.

    Muhtemelen en iyi çözüm ise zaten bağlamak için bazı C kütüphanesi ise şu anda mevcut değil. Ama eğer sadece yeniden yazmak için küçük bir C fonksiyonu varsa, muhtemelen Cython ile çalışırdım.

    Eğer önceden derlenmiş bir Destek yok.eksileri: Python Bjam kullanacaksın (marka değiştirme sıralama). Gerçekten Bjam ve sözdizimi nefret ediyorum.

    Python kütüphaneleri B. P ile oluşturulan obez olma eğilimindedir. Bunu da alırçokzaman bunları derlemek.

  • Py (üretilmiyor): bu Artırmak.Python kolay. Py C ayrıştırıcı kodunuzu okumak için kullanır ve sonra da Destek oluşturur.Python kod otomatik olarak. Ayrıca, yazarı büyük bir destek var (hayır o ben değilim ;-) ).

    eksileri: tek sorunları Destek nedeniyle.Kendisi Python. 2014 bu proje artık üretilmiyor Gibi görünüyor. güncelleme:

  • Pybindgen:

    Kod C-API ile ilgili üretir. Ya bir Python dosyasında fonksiyonları ve sınıfları tanımlamak veya Pybindgen senin başlıklarını okuyalım ve bağlantıları otomatik olarak (bunun için pygccxml, python Kütüphanesi Py yazarı yazdı kullanır) oluşturabilirsiniz.

    eksileri: genç bir proje var, Boost daha küçük bir ekiple.Python. Hala bazı sınırlamalar vardır: C sınıflar, Geri (otomatik olarak değil, özel bir geri arama işleme kodu yazılabilir ama) için birden çok devralma kullanın. C. Python istisnalar çeviri

    Kesinlikle iyi bir göz değer.

  • Yeni bir tane: 2009/01/20 üzerinde Py yazarı python ile arayüz C/C kodu için new package duyurdu. Ctypes dayanmaktadır. Zaten çalışmadım ama yaparım! Not: Bu proje discontiued görünüyor, Py .

  • CFFI: çok yakın zamanlara kadar bu zamana kadar bu varlığını bilmiyordum edemem düşüncelerimi yazayım. Python dizeleri C fonksiyonları tanımlamak ve doğrudan aynı Python modülü çağırabilirsiniz gibi görünüyor.

  • Cython: Bu şu anda benim tüm projelerimde kullandığım yöntemi. Temelde özel kod yazma .pyx dosyaları. Bu dosyalar derlenmiş (tercüme) teslim modülleri CPython için derlenmiş olan C kodu. Cython Python kodu normal saf Python geçerli aslında. (ve benzeyebilir Cython dosyaları pyx), ama değişken türleri gibi, aynı zamanda daha fazla bilgi alabilirsiniz. Bu isteğe bağlı yazarak Cython daha hızlı C kodu üretmek için izin verir. Cython dosyaları kod saf Python fonksiyonları da C ve C fonksiyonları ve yöntemleri C) her ikisi de arayabilirsiniz.

    Bana biraz zaman aynı kod C ve C fonksiyon, mix Python ve C değişkenleri çağıran Cython, ve düşünmek için zaman aldı. Ama çok güçlü bir dil, etkin (2014) ve samimi bir topluluk var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joshua Benedict

    Joshua Bened

    26 EKİM 2013
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • Shanice Caruthers

    Shanice Caru

    27 EKİM 2011