Domanda

So che un sacco di linguaggi di scripting, (Python, Ruby, Lua, PHP) ma io non conosco nessun linguaggi compilati come C / C ++, ho voluto provare e velocizzare po 'di codice Python usando Cython, che è essenzialmente un pitone -> C compiler, finalizzato alla creazione di estensioni C per Python. Fondamentalmente si codice in una versione più rigorosa di pitone che compila in C -> codice nativo.

Ecco il problema, non so C, ma la documentazione Cython si rivolge a persone che evidentemente già conoscono C (nulla è spiegato, solo presentato), e non è di alcun aiuto per me, ho bisogno di sapere se ci sono dei tutorial buone Cython volti a programmatori Python, o se sto andando imparare C prima imparo Cython.

tenere a mente Sono un programmatore python competente, preferirei di gran lunga imparare Cython dal punto di vista del linguaggio Sono già bravo a, piuttosto che imparare un nuovo linguaggio per imparare Cython.

1) PER FAVORE Sconsigliato psyco

modifica: tutte le informazioni che vi aiuteranno a capire la documentazione Cython oficial sono informazioni utili

È stato utile?

Soluzione

Per saperne di C! (Mi dispiace -. Irresistibile)

Scherzi a parte, però, sembra che tu lo più c'è da sapere su C tipi di variabili (C tipi, se si vuole) al fine di utilizzare in modo efficace cdef.

In seguito, se si decide di stringere i denti e imparare il C correttamente, concedetevi una copia di Kernighan e Ritchie , o K & R, disponibile su Amazon .

Altri suggerimenti

cython è bravo a due cose diverse

  1. interfacciamento con librerie di lingua C
  2. Accelerare il codice Python

Probabilmente ottiene più esposizione dal 1. qui l'enfasi sui materiali di tutorial che hai trovato verso roba C. Sembra che si desidera utilizzarlo come 2. però.

Dalla mia esperienza con cython si può solo provare a compilare i vostri programmi Python e vedere se funziona. Si otterrà un po 'più veloce (forse). Per ottenere molto più veloce è necessario attivare selettivamente i tipi Python in tipi C. Questo inizia a mettere in evidenza la potenza del Cython.

Se si guarda alla esercitazione ufficiale è necessario studiare, dove hanno usato la parola chiave cdef.

Quindi, per ricapitolare

  1. Fai il tuo programma Python esistente compilare con Cython con il minor numero possibile di modifiche
  2. Dichiarare alcune variabili come cdef e farlo funzionare di nuovo
  3. Se non è abbastanza veloce passare al punto 2.

Mi dispiace che non sia un puntatore a un tutorial, ma dovrebbe dare una direzione per andare in!

Hai visto questo: http://www.perrygeo.net/wordpress/? p = 116 sembra una buona visione d'insieme. Si potrebbe anche avere uno sguardo alla fonte in pyzmq e gevent - usano Cython per il loro codice di base

.

Ben

Cython fa supporto concorrenza (è possibile utilizzare i thread POSIX native con c, che possono essere compilati nel modulo misura ion), devi solo essere abbastanza attenzione a non modificare alcun oggetto python quando GIL viene rilasciato e di tenere presente la interprete per sé non è thread-safe. È inoltre possibile utilizzare multiprocessing con python di utilizzare più core per il parallelismo che può a sua volta utilizzare le estensioni Cython compilati per accelerare ancora di più. Ma tutto sommato è sicuramente conoscere il modello di programmazione C, tipi statici ecc

Si può fare un sacco di cose molto utili con Cython se si può rispondere alla seguente quiz C ...

(1) Che cosa è un doppio? Che cosa è un int?

(2) Che cosa significa la parola "compilazione" significa?

(3) Cosa è un'intestazione (h) file?

Per rispondere a queste domande non è necessario per leggere un libro intero C! ... forse il capitolo 1.

Una volta che si può passare che quiz, prova di nuovo con il tutorial.

Quello che faccio di solito è iniziare con il codice python puro, e aggiungere elementi Cython poco a poco. In tale situazione, si può imparare la Cython dispone di bit per bit. Per esempio non capisco stringhe C, perché finora non ho provato a cythonize codice che coinvolge le stringhe. Quando lo faccio, io per prima cercare come stringhe lavorano in C, e poi la seconda guardano come stringhe lavorano in Cython.

Anche in questo caso, una volta che hai ottenuto iniziato con Cython, sarà ora e poi incorrere in qualche complicazione che richiede l'apprendimento un po 'più C. E, naturalmente, il più C si conosce, più dextrous sarai con sfruttare appieno Cython, per non parlare di risoluzione dei problemi se qualcosa va storto. Ma questo non dovrebbe farvi riluttanti a iniziare!

Cython non supporta discussioni bene a tutti. Essa detiene il GIL (Global Intrepreter Lock) per tutto il tempo! Questo rende il codice thread-safe per (quasi) disabilitando esecuzione concorrente. Quindi io non lo uso per lo sviluppo di uso generale.

A proposito di tutta la C che si ha realmente bisogno di sapere è:

  1. tipi C sono molto più veloce di tipi Python (l'aggiunta di interi C o doppie può essere fatto in un singolo ciclo di clock), ma meno sicura (non sono arbitrariamente dimensioni e può silenziosamente overflow).
  2. funzione C chiamate (cdef) sono molto più veloci chiamate di funzione di Python (def) (ma sono meno flessibili).

Questo ti porterà la maggior parte della strada. Se si vuole guadagnarsi da quell'ultimo aumento di velocità del 10-20% per la maggior parte delle applicazioni, non c'è niente da fare intorno sapere C, e come moderni processi di lavoro (puntatori, cache, ...).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top