2013-03-21 18 views
10

L'incorporamento del codice C++ in python usando ctypes, boost.python, ecc rende la tua applicazione python più veloce?L'incorporamento del codice C++ in python rende più veloce l'applicazione python?

Supponiamo che sto facendo un'applicazione in pygtk e ho bisogno di alcune funzioni che devono essere veloci. Quindi se uso C++ per determinati compiti nella mia applicazione sarà utile?

E quali sono le altre opzioni per rendere più veloce il codice Python?

+14

C++ non è uno strumento magico che rende tutto più veloce. Puoi facilmente scrivere codice C++ che gira più lentamente del codice Python facendo la stessa cosa. Dipende sempre dalla tua situazione e dalle tue abilità in C++, quindi l'unico vero modo per scoprirlo è farlo. – PlasmaHH

+0

Dipende. Puoi rendere più veloce il codice sostituendolo con C++ ma non è garantito. – wRAR

+0

Grazie per le tue risposte !! Sì, tutto si riduce alle capacità di programmazione individuale. Volevo solo sapere se incorporare le funzioni C++ nella tua applicazione potrebbe rendere più veloce il tuo programma. –

risposta

7

Riscrivere le parti critiche per le prestazioni del codice in C++ potrebbe essere un'opzione. Per fare ciò in modo efficace, è necessario prima capire dove sono i colli di bottiglia. Il modo migliore per farlo è probabilmente scrivere prima tutto in puro Python e poi il profilo.

Un'altra opzione potrebbe essere quella di utilizzare PyPy.

Infine, se il collo di bottiglia è rappresentato da calcoli numerici, vale la pena dare un'occhiata allo NumPy.

Vale la pena notare che se, ad esempio, si scopre che il codice è vincolato all'I/O, nessuna delle opzioni sopra riportate sarà di grande aiuto.

+0

Thanx NPE, ora capisco. NumPy è qualcosa che potrei esplorare ulteriormente. –

2

Dipende, non c'è una risposta definitiva. Se scrivi codice errato in C++ potrebbe essere anche più lento di un codice Python ben scritto.

Supponendo che si possa scrivere codice C++ di buona qualità, è possibile prevedere accelerazioni fino a 20x nelle parti critiche per le prestazioni.

Come dice l'altra risposta, NumPy è una buona opzione per i colli di bottiglia numerici (se si pensa in operazioni a matrice piuttosto che in loop!); e SciPy viene fornito con Weaver, che ti permette di incorporare C++ inline e altre chicche.

+0

Sì, NumPy è qualcosa che stavo cercando !! –