開発中のプロジェクトで、いくつかの python 関数とクラスを cython に変換しています。したがって、基本的に同じコードを含むさまざまな .pyx ファイルと対応する .py ファイルがあり、cython には変数の型が含まれています。しかし、ときどき、cython のものには python コードからのいくつかの小さな変更が含まれます。(1) 変更されたコードは、同じ python 形式を維持するよりも高速 (ただし同等) であるためです。
最初は、このコードの重複が問題になるとは思いませんでした。さらに、python と cython の実装の出力を定期的に比較して、意図しない変更をより迅速に検出できるようにすることを計画していました。問題は、バグを見つけたり、改善を加えたりするなどして、両方の実装を同期させておくための作業が増えていることです。
理想的には、すべてのプロジェクトを python で実行し、遅い場合はホット スポットを見つけて cythonize することを知っています。ただし、私のプロジェクトでは、Python を matlab の代わりに使用して、開発中の拡張現実システムで対話的にアルゴリズムのプロトタイプを作成しています。システムはリアルタイムで動作するため、早い段階で新しいアルゴリズムを cython して、より高い fps を取得し、リアルタイムでどのように動作するかを確認することがよくあります。
だから私の質問:
多くの cython コードを含むプロジェクトでは、コードが重複していますか? .pyx ファイルと対応する .py ファイル? それらを同期させますか?それとも、cython のみを使用し、cython で直接新しいアルゴリズムを開発していますか? 重複したコードはありません。しかし、お気に入りの python IDE (wingIDE) で cython コードをデバッグできません。さらに言えば、Windows 7 で cygdb を動作させることができなかったので (長い間試した後、Linux でしか動作しないと思います)、print ステートメントを使用して cython コードをデバッグすることに行き詰まっていますが、これは理想的ではなく、基本的にはPython と wingIDE で実行できるすべてのインタラクティブな開発 (matlab のような) を失います。
次に、純粋な python モードがありますhttp://docs.cython.org/src/tutorial/pure.html .pxd ファイルを使用して python コードを拡張するというアイデアが好きです。重複したコードの問題はありません。まだ試していませんが、いくつかの制限について読んだことがあるので、十分に機能しているかどうかはわかりません。また、純粋な python モードで、上記の (1) で説明した python コードからこれらの小さな変更を統合できるかどうかもわかりません。これらはpxdファイルに入れることができますか? または、変更のためにpxyファイルが必要ですか?または、何かを変更することを忘れてください。純粋な python モードで良い経験をした人はいますか?
cython を使用する別のより良い方法があるかどうかはわかりません。より良い方法を知っている場合はお知らせください。