Как перезагрузить модуль 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?

Любая помощь приветствуется.