Pertanyaan Tutorial Cython Noob-Ready [tertutup]


Saya tahu banyak bahasa scripting, (python, ruby, lua, php) tapi saya tidak tahu bahasa yang dikompilasi seperti C / C ++, saya ingin mencoba dan mempercepat beberapa kode python menggunakan cython, yang pada dasarnya adalah python - > C compiler, yang bertujuan untuk membuat ekstensi C untuk python. Pada dasarnya Anda kode dalam versi python yang lebih ketat yang mengkompilasi ke C -> kode asli.

inilah masalahnya, saya tidak tahu C, namun dokumentasi cython ditujukan pada orang-orang yang jelas sudah tahu C (tidak ada yang dijelaskan, hanya disajikan), dan tidak membantu saya, saya perlu tahu apakah ada yang baik tutorial cython yang ditujukan untuk programmer python, atau jika saya harus belajar C sebelum saya belajar Cython.

ingatlah saya seorang programmer python yang kompeten, saya lebih suka belajar cython dari perspektif bahasa saya sudah pandai, daripada belajar bahasa baru untuk belajar cython.

1) HARAP tidak menyarankan psyco

sunting: Informasi apa pun yang akan membantu memahami dokumen cython resmi adalah informasi yang berguna


19
2017-10-17 12:33


asal


Jawaban:


Belajar C! (Maaf - tak tertahankan.)

Serius, meskipun, sepertinya Anda sebagian besar perlu tahu tentang Tipe variabel C (Tipe C, jika Anda mau) untuk digunakan cdef efektif.

Kemudian, jika Anda memutuskan untuk menggigit peluru dan belajar C dengan benar, manjakan diri Anda dengan salinannya Kernighan dan Ritchie, atau K & R, tersedia di Amazon.


9
2017-10-17 13:45



cython pandai dua hal yang berbeda

  1. Interfacing dengan pustaka bahasa C
  2. Mempercepat kode Python

Ini mungkin mendapat lebih banyak eksposur dari 1. maka penekanan pada materi tutorial yang Anda temukan terhadap hal-hal C. Kedengarannya seperti Anda ingin menggunakannya seperti 2. meskipun.

Dari pengalaman saya dengan cython Anda dapat mencoba mengkompilasi program python Anda dan melihat apakah itu berfungsi. Ini akan menjadi sedikit lebih cepat (mungkin). Untuk mendapatkan jauh lebih cepat Anda perlu selektif mengubah jenis python menjadi tipe C. Ini mulai memunculkan kekuatan cython.

Jika Anda melihat tutorial resmi Anda perlu belajar di mana mereka telah menggunakan cdef kata kunci.

Jadi untuk dirangkum

  1. Jadikan program python Anda yang sudah ada dikompilasi dengan cython dengan sesedikit mungkin perubahan
  2. Deklarasikan beberapa variabel sebagai cdef dan membuatnya berfungsi kembali
  3. Jika tidak cukup cepat, lanjutkan ke langkah 2.

Saya minta maaf itu bukan penunjuk ke tutorial, tetapi seharusnya memberi Anda arah untuk masuk!


16
2017-10-17 12:45



Pernahkah kamu melihat ini: http://www.perrygeo.net/wordpress/?p=116 sepertinya gambaran yang cukup bagus. Anda juga bisa melihat sumber di pyzmq dan gevent - mereka menggunakan Cython untuk kode inti mereka.

Ben


2
2017-09-23 14:15



Cython tidak mendukung konkurensi (Anda dapat menggunakan thread POSIX asli dengan c, yang dapat dikompilasi dalam modul ion tingkat), Anda hanya perlu cukup berhati-hati untuk tidak mengubah objek python ketika GIL dilepaskan dan perlu diingat interpreter itu sendiri tidak aman utas. Anda juga dapat menggunakan multiprocessing dengan python untuk menggunakan lebih banyak core untuk paralelisme yang pada gilirannya dapat menggunakan ekstensi cython terkompilasi Anda untuk mempercepat lebih banyak lagi. Tetapi semua dalam semua Anda pasti harus tahu model pemrograman c, jenis statis dll


1
2018-05-17 20:57



Anda dapat melakukan banyak hal yang sangat berguna dengan Cython jika Anda dapat menjawab kuis C berikut ...

(1) Apa itu ganda? Apa itu int?

(2) Apa arti kata "kompilasi"?

(3) Apa itu file header (.h)?

Untuk menjawab pertanyaan-pertanyaan ini Anda tidak perlu membaca keseluruhan buku C! ... mungkin bab 1.

Setelah Anda dapat melewati kuis itu, coba lagi dengan tutorial.

Yang biasanya saya lakukan adalah memulai dengan kode python murni, dan menambahkan elemen Cython sedikit demi sedikit. Dalam situasi itu, Anda dapat mempelajari fitur Cython sedikit demi sedikit. Sebagai contoh saya tidak mengerti string C, karena sejauh ini saya belum mencoba untuk mengkonsep kode yang melibatkan string. Ketika saya melakukannya, saya pertama kali akan mencari tahu bagaimana string bekerja di C, dan kemudian kedua mencari bagaimana string bekerja di Cython.

Sekali lagi, setelah Anda mulai dengan Cython, Anda sekarang dan kemudian mengalami beberapa komplikasi yang membutuhkan sedikit lebih banyak belajar C. Dan tentu saja semakin banyak C Anda tahu, semakin tangkas Anda akan dengan mengambil keuntungan penuh dari Cython, tidak untuk menyebutkan pemecahan masalah jika ada masalah. Tapi itu seharusnya tidak membuat Anda enggan untuk memulai!


1
2018-06-19 14:45



Anda dapat memeriksa pembicaraan ini juga: http://www.youtube.com/watch?v=JKCjsRDffXo

semoga itu membantu


1
2017-08-01 23:43



Cython tidak mendukung utas sama sekali. Ini memegang GIL (Global Intrepreter Lock) sepanjang waktu! Ini membuat kode Anda aman dengan (secara virtual) menonaktifkan eksekusi bersamaan. Jadi saya tidak akan menggunakannya untuk pengembangan tujuan umum.


0
2017-12-14 23:48



Tentang semua C yang benar-benar perlu Anda ketahui adalah:

  1. Tipe C jauh lebih cepat daripada tipe Python (menambahkan ke C int atau doubles dapat dilakukan dalam siklus jam tunggal) tetapi kurang aman (mereka tidak sewenang-wenang berukuran dan mungkin diam-diam meluap).
  2. Fungsi C (cdef) panggilan jauh lebih cepat daripada Python (def) fungsi panggilan (tetapi kurang fleksibel).

Ini akan membawa Anda jauh dari sana. Jika Anda ingin menambah kecepatan 10-20% terakhir untuk sebagian besar aplikasi, tidak ada cara mengetahui C, dan bagaimana proses modern bekerja (pointer, cache, ...).


0
2018-04-06 03:16