como recarregar um módulo cython interativamente usando pyximport
Ao escrever código python, meu fluxo de trabalho típico é usar o prompt interativo e fazer algo como
write function
repeat until working:
test function
edit function
Quando tiver certeza de que tudo está ok, vou executar o código no modo não interativo e coletar os resultados.
Às vezes, as funções são um pouco lentas demais e devem ser otimizadas.
Estou interessado em usar o cython para otimizar essas funções lentas, mas quero manter meu fluxo de trabalho interativo, ou seja, executar as funções, fazer alterações, executá-las novamente.
Existe uma maneira fácil de fazer isso?
Até agora eu tentei colocar minhas funções de cython em um módulo separado "my_functions.pyx":
def fun1(int x):
return x + 130
def fun2(int x):
return x / 30
Em seguida, executando (no prompt interativo)
import pyximport; pyximport.install()
import my_functions as mf
mf.fun1(25)
Isso funciona na primeira vez, mas quero fazer alterações nas minhas funções de cython e recarregá-las na mesma sessão interativa.
corrida
import my_functions as mf
não atualiza as funções. E correndo
reload(mf)
dá um erro: Nenhum módulo chamado my_functions
A única coisa que funciona é sair da sessão atual, reiniciar o ipython e importar o módulo novamente. Mas isso mata os benefícios da execução interativa.
Existe uma maneira melhor de otimizar funções com o cython interativamente?
Se não, você pode descrever outras maneiras de otimizar o código com o cython?
Qualquer ajuda é apreciada.