jak przeładować moduł cython interaktywnie za pomocą pyximport

Podczas pisania kodu Pythona moim typowym przepływem pracy jest użycie interaktywnego polecenia i zrobienie czegoś takiego

write function
repeat until working:
  test function
  edit function

Po upewnieniu się, że wszystko jest w porządku, uruchomię kod w trybie nieinteraktywnym i zbieram wyniki.

Czasami funkcje działają trochę zbyt wolno i muszą być zoptymalizowane.

Jestem zainteresowany używaniem cython do optymalizacji tych wolnych funkcji, ale chcę zachować mój interaktywny przepływ pracy, tj. Uruchomić funkcje, wprowadzić zmiany, uruchomić je ponownie.

Czy można to zrobić w prosty sposób?

Do tej pory próbowałem umieścić moje funkcje cython w oddzielnym module „my_functions.pyx”:

def fun1(int x):
    return x + 130

def fun2(int x):
    return x / 30

Następnie działa (w wierszu interative)

import pyximport; pyximport.install()
import my_functions as mf
mf.fun1(25)

Działa to za pierwszym razem, ale chcę wprowadzić zmiany do moich funkcji cythona i przeładować je w tej samej interaktywnej sesji.

bieganie

import my_functions as mf

nie aktualizuje funkcji w ogóle. I działa

reload(mf)

daje błąd: Brak modułu o nazwie my_functions

Jedyne, co działa, to zamknięcie bieżącej sesji, ponowne uruchomienie ipythona i ponowne zaimportowanie modułu. Ale ten rodzaj zabija korzyści płynące z interaktywnego działania.

Czy istnieje lepszy sposób interaktywnej optymalizacji funkcji za pomocą cython?

Jeśli nie, czy możesz opisać inne sposoby podejścia do optymalizacji kodu za pomocą cython?

Każda pomoc jest doceniana.

questionAnswers(1)

yourAnswerToTheQuestion