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.