Как перезагрузить модуль Cython в интерактивном режиме с помощью Pyximport
При написании кода на Python мой типичный рабочий процесс - использовать интерактивное приглашение и делать что-то вроде
write function
repeat until working:
test function
edit function
Как только я буду уверен, что все в порядке, я буду запускать код в неинтерактивном режиме и собирать результаты.
Иногда функции работают слишком медленно и должны быть оптимизированы.
Я заинтересован в использовании Cython для оптимизации этих медленных функций, но я хочу сохранить свой интерактивный рабочий процесс, то есть запускать функции, вносить изменения, запускать их снова.
Есть простой способ сделать это?
До сих пор я пытался поместить свои функции Cython в отдельный модуль "my_functions.pyx":
def fun1(int x):
return x + 130
def fun2(int x):
return x / 30
Затем работает (при интерактивной подсказке)
import pyximport; pyximport.install()
import my_functions as mf
mf.fun1(25)
Это работает в первый раз, но я хочу внести изменения в мои функции Cython и перезагрузить их в том же интерактивном сеансе.
Бег
import my_functions as mf
не обновляет функции вообще. И работает
reload(mf)
выдает ошибку: нет модуля с именем my_functions
Единственное, что работает, - это выйти из текущего сеанса, перезапустить ipython и снова импортировать модуль. Но этот вид убивает преимущества работы в интерактивном режиме.
Есть ли лучший способ оптимизировать функции с помощью Cython в интерактивном режиме?
Если нет, можете ли вы описать некоторые другие подходы к оптимизации кода с помощью Cython?
Любая помощь приветствуется.