1

Pyramid フレームワークで書かれた Python アプリケーションがあります。

標準のインポート ライブラリを使用して、(デバッグ用に) これにログオンすることを実際に利用します。

本番環境でプロファイルを作成していると、ロギング アクティビティからかなりのオーバーヘッドが発生しているようです。すべての文字列の書式設定とループが加算されます。削除したいのですが、できません。実際には、テストのために保持する必要があり、運用環境でデバッグする必要がある場合もあります。

必要に応じてロギングを最小限に抑えるための効果的な戦略を誰かが持っているかどうか疑問に思っています.

たとえば、mod_perl では、コンパイラは False 定数で実行されるステートメントを「最適化」します。

疑似コードで... (私は長い間perlに触れていません!)

use constant DEBUG => False ;
if ( DEBUG ) {
      log.debug("stuff here " + string );
}

また

use constant DEBUG => False ;
DEBUG && log.debug("stuff here " + string );

これらのシナリオでは、log.debug の呼び出しや文字列補間さえも行われません。

Python でその動作を模倣する効果的な方法を推奨できる人はいますか?

4

3 に答える 3

9

使用できる場合は連結を使用しないでくださいlog.debug('stuff here %s', string)。ロギング モジュールは、ロギング時に実際に文字列をフォーマットするまで補間を延期します。DEBUGログ レベルが無効になっている場合、補間は行われません。

また、ログ レベルをテストして、必要でない限り高価なログ情報を収集しないようにすることもできます。

if logger.isEnabledFor(logging.DEBUG):
    logger.debug('Message with %s, %s', expensive_func1(),
                                        expensive_func2())

Logging HOWTO の最適化セクションを参照してください。

于 2013-05-16T18:50:31.550 に答える
9

を使用し__debug__ます。このフラグはFalse、コマンド ライン フラグを指定して Python を実行すると に設定され、-OPython はさらにコンパイル時にデバッグ コードを最適化します。数か月前にブログ記事を書きました。

于 2013-05-16T18:43:12.437 に答える