При написании кода 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?
Любая помощь приветствуется.