wie man ein cython-modul interaktiv mit pyximport neu lädt

Beim Schreiben von Python-Code besteht mein typischer Workflow darin, die interaktive Eingabeaufforderung zu verwenden und so etwas wie zu tun

write function
repeat until working:
  test function
  edit function

Sobald ich mir ziemlich sicher bin, dass alles in Ordnung ist, führe ich den Code im nicht interaktiven Modus aus und sammle die Ergebnisse.

Manchmal laufen die Funktionen etwas zu langsam und müssen optimiert werden.

Ich möchte Cython verwenden, um diese langsamen Funktionen zu optimieren, aber ich möchte meinen interaktiven Workflow beibehalten, d. H. Die Funktionen ausführen, Änderungen vornehmen und sie erneut ausführen.

Gibt es eine einfache Möglichkeit, dies zu tun?

Bisher habe ich versucht, meine Cython-Funktionen in einem separaten Modul "my_functions.pyx" unterzubringen:

def fun1(int x):
    return x + 130

def fun2(int x):
    return x / 30

Dann ausführen (an der Eingabeaufforderung)

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

Dies funktioniert zum ersten Mal, aber ich möchte Änderungen an meinen Cython-Funktionen vornehmen und sie in derselben interaktiven Sitzung erneut laden.

Laufen

import my_functions as mf

aktualisiert die Funktionen überhaupt nicht. Und läuft

reload(mf)

gibt einen Fehler aus: Kein Modul namens my_functions

Das Einzige, was funktioniert, ist, die aktuelle Sitzung zu beenden, ipython neu zu starten und das Modul erneut zu importieren. Aber diese Art des Laufens macht die Vorteile des interaktiven Laufens zunichte.

Gibt es eine bessere Möglichkeit, Funktionen mit Cython interaktiv zu optimieren?

Wenn nicht, können Sie einige andere Möglichkeiten beschreiben, wie Sie Code mit Cython optimieren können?

Jede Hilfe wird geschätzt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage