Quando si scrive codice Python, il mio tipico flusso di lavoro è quello di utilizzare il prompt interattivo e fare qualcosa di similecome ricaricare un modulo Cython modo interattivo usando pyximport
write function
repeat until working:
test function
edit function
Una volta che sono abbastanza sicuro che tutto è ok, corro il codice in modalità non interattiva e raccoglie i risultati.
A volte le funzioni funzionano un po 'troppo lentamente e devono essere ottimizzate.
Sono interessato all'utilizzo di cython per ottimizzare queste funzioni lente, ma voglio mantenere il mio flusso di lavoro interattivo, ad esempio, eseguire le funzioni, apportare modifiche, eseguirle nuovamente.
C'è un modo semplice per farlo?
Finora ho provato a mettere le mie funzioni Cython in un modulo "my_functions.pyx" separati:
def fun1(int x):
return x + 130
def fun2(int x):
return x/30
Poi esecuzione (al prompt interative)
import pyximport; pyximport.install()
import my_functions as mf
mf.fun1(25)
Questo funziona la prima tempo, ma voglio apportare modifiche alle mie funzioni cython e ricaricarle nella stessa sessione interattiva.
esecuzione
import my_functions as mf
non aggiorna le funzioni affatto. E in esecuzione
reload(mf)
dà un errore: No module named my_functions
L'unica cosa che funziona è quello di uscire dalla sessione corrente, riavviare ipython, e importare il modulo tutto nuovo. Ma questo tipo di uccide i benefici dell'esecuzione interattiva.
Esiste un modo migliore per ottimizzare le funzioni con cython in modo interattivo?
In caso contrario, è possibile descrivere altri modi per avvicinarsi all'ottimizzazione del codice con cython?
Qualsiasi aiuto è apprezzato.
Il problema è che i moduli cython sono compilati in librerie condivise, che non possono essere ricaricate dalla funzione 'reload'. AFAIK al momento non puoi semplicemente scaricare una libreria condivisa, quindi dovrai riavviare l'interprete. Nota che puoi evitare di riavviare * ipython * se usi la console Qt: usa 'Ctrl +.'per riavviare solo il kernel, senza riavviare l'intera console. – Bakuriu