2008-12-18 6 views
6

Sto cercando di scrivere un wxWidget che visualizza una rete di nodi grafica e quindi esegue molte operazioni di disegno. So che usare Python per farlo sarà più lento, ma preferisco farlo funzionare e portarlo più tardi quando è funzionale. Idealmente, se il risultato della performance non è troppo grande, preferirei mantenere il codebase in Python per aggiornamenti semplici.Quanto più lento è un wxWidget scritto in Python rispetto a C++?

Quello che mi chiedo è quanto più lento dovrei aspettarmi che le cose vadano? Mi rendo conto che questo è vago e aperto, ma ho solo bisogno di un senso di cosa aspettarmi. Disegnare 500 cerchi si abbassa? Sarà evidente a tutti? Quali sono le tue esperienze?

risposta

1

IMHO, il principale collo di bottiglia saranno le strutture dati che verranno utilizzate per rappresentare il grafico di rete. Ho codificato un'applicazione simile per tracciare le dipendenze tra varie versioni dei componenti in un sistema e la grafica era l'ultima cosa di cui dovevo preoccuparmi e stavo certamente disegnando più di 500 oggetti con riempimenti sfumati per alcuni di loro!

Se si sta impantanando, è necessario effettuare il checkout utilizzando PyGame per disegnare oggetti.

+0

Grazie. Ti ho dato il segno di spunta perché hai dato un caso d'uso che è quasi esattamente quello che ho intenzione di fare. – Soviut

1

Nella mia esperienza, fare le cose in modo ingenuo (disegnando ogni oggetto sullo schermo) si impantanerà in Python più rapidamente di C++. Tuttavia, con Python sarà molto più veloce e meno doloroso codificarlo in modo intelligente (vedi ad esempio PseudoDC), che farà saltare l'ingenua implementazione del C++ fuori dall'acqua.

Sono d'accordo con suraj. al di sopra del fatto che PyGame può essere una buona scelta, a seconda di quanto sia ricca di grafica l'app, rispetto alla comoda roba di wxPython ti arrenderai.

+0

cos'è PseudoDC? –

+0

Buon commento. Ho aggiunto un link ai documenti. Puoi anche trovare un esempio nella demo wxPython. –

1

Per il disegno, le persone hanno suggerito PyGame. Mi piace PyGame, è facile da lavorare e funziona bene. Altre scelte potrebbero essere Pyglet, o usare PyOpenGL (molto probabilmente si può anche disegnare con un widget wx, anche se non l'ho mai fatto).

Personalmente, lo farei in Python usando qualsiasi libreria con la quale ho più familiarità (nel mio caso, userei pygtk e cairo) e mi preoccupo delle prestazioni solo quando diventa un problema - quindi profilo e ottimizzazione il collo di bottiglia, se il suo codice Python è lento, saprò quali bit girare in C.