6

だから、ここに私の問題があります:私はPythonでコードを書いていますが、遅すぎるコードの一部でパフォーマンスを改善する必要があります。良い(そして簡単な)解決策はcythonを使用しているようです。試してみたところ、良い結果が得られました。問題は、Python コードで assert ステートメントを使用していることです。cython を使用する前に、-OO オプションを使用して Python コードをコンパイルできたので、アサーション テストを実行しないバージョンを提供でき、デバッグ用のアサートを保持できました。しかし、cython でコンパイルされたファイルは常にアサートを実行するようです。アサーションを削除する (または削除しない) ために cython コンパイルに渡すことができるいくつかのオプションはありますか?

4

2 に答える 2

10

C プリプロセッサ マクロを定義すると、Cython はアサーションをスキップしますPYREX_WITHOUT_ASSERTIONS-DPYREX_WITHOUT_ASSERTIONSそのため、生成された C ファイルをコンパイルするときに C コンパイラに渡します。これを行う方法は、ビルド プロセスによって異なります。

于 2010-11-26T13:07:57.577 に答える
-1

pypreprocessorを使用する

これはPYPI(Python Package Index)にもあり、pipを使用して取得できます。

実装は次のとおりです。

from pypreprocessor import pypreprocessor

pypreprocessor.parse()

#define debug

#ifdef debug
...place assert to be removed here...
#endif

これは基本的に、標準のCプリプロセッサ条件付きコンパイルと同じように機能します。

補足:このモジュールは、python2xとpython3kの両方と互換性があります。

免責事項:私はpypreprocessorの作者です。

これにより、プリプロセッサステージが追加されるため、初期ロードに時間がかかりますが、出力されるバイトコード(.pyc)は最適化されます。

于 2011-03-16T03:24:15.513 に答える