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.

questionAnswers(1)

yourAnswerToTheQuestion