23

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 を使用してコードを最適化する他の方法を説明できますか?

どんな助けでも大歓迎です。

4

1 に答える 1

41

「pyximport.install」関数に、cython モジュールの再ロードを可能にする、文書化が不十分な機能が見つかりました。この機能を True に設定すると、Python を再起動することなく、cython モジュールをインタラクティブにロード/リロードできます。

cython モジュールを次のように初期化する場合:

import pyximport
pyximport.install(reload_support=True)
import my_functions as mf

cython モジュールに変更を加えてから、次のようにリロードできます。

reload(mf)

うまくいけば、これは誰かに役立つでしょう。

于 2013-08-08T19:21:41.457 に答える