2017-09-06 5 views
0

マルチスレッドアプリケーションでは、(それぞれ上限50Kのログメッセージを含む)ログメッセージのセットをブロックとして書く必要がある状況があります。一つずつ。Pythonロガーを使用して2.5メガバイトのキャラクタバッファを書き込む

明白な副作用があるので、私はここでスレッドロックを使用しないでください(私のブロックロギングをクリティカルセクションとして使用する)。シリアライズ、シンクロナイゼーション、パフォーマンスを低下させます。

同期を避けるため、各スレッドが独自のバッファを使用するように、スレッドごとのバッファを使用することを考えています。バッファを使用する前または後に、すなわちログがファイルに書き込まれると、それもクリーニングされます。

私はバッファにこれらのログを書いて最初にすることを考えた後、私は約50バイトとログメッセージのサイズを考慮した場合

logger.info("Log message") 

PythonのロガーのログメッセージのAPIを使用して、ログファイルにバッファを書いていますこのバッファの合計サイズは2.5MBytes(50K x 50バイト)になります

私はpythonのロガーがこのバッファサイズでどのように動作するのか理解したいと思いますか?それがパフォーマンスに影響を与えるかどうか、それがどのように影響するか?

このような種類のログをサポートするために利用できる他のPython APIがあるかどうか教えてください。

+0

あなたのパフォーマンスの質問に答えるのは難しいです - ロガーは自分自身のスレッドまたはプロセスに住んでいますか?書き込みブロックはありますか?宛先はSSDドライブ上のローカルファイルですか、あるいはSMTPHandlerのようなものを使用していますか? –

+0

あなたの質問に答えることはできませんが、問題の種類を解決するために設計されたlogging.QueueHandlerとQueueListener:https://docs.python.org/3/library/logging.handlers.html#logging .handlers.QueueHandler –

+0

こんにちは@DanielleM、ロガーAPIは、独自のバッファを持っている(それ自身のプロセスを持たない)同じスレッドによって呼び出されます。書き込みブロック - 私は "logging.handlers.RotatingFileHandler"を使用していると思います。両方のスレッドが同じログファイルに書き込む予定です。私はSSDを使用していません。私の主な懸念は、Pythonロガーが2.5MBのバッファにどのように反応するかということです。それはそれを成功裏に書くつもりですか、もしあれば、副作用があるでしょう。 @DanielleM。 – AnilJ

答えて

1

いいえ、pythonはファイルに2.5MBのバッファを書き込んでも問題ありません。

ディスクI/Oのような問題は、書き込みがメインスレッドなどをブロックするかどうかがパフォーマンスに影響する可能性がありますが、一般的にはPythonは2.5MBバッファをディスクに簡単にダンプできます。

関連する問題