2017-08-23 29 views
0

システムコードの実行中にたくさんのデータを記録する必要があります。どのようなロギングパッケージを使用して効率的な非同期ロギングを行うことができますか? 標準のPythonロギングパッケージ(https://docs.python.org/2/library/logging.html)はデフォルトで非同期ですか?Python - 非同期ロギング

+1

ありません、それはありません。しかし、メッセージを他のスレッドが受け取ったキューにドロップする独自のハンドラを書くのは簡単です。 –

+0

@KlausD。あなたはもっと説明したり、それについて読むためのリンクを提案したりできますか? – Ziva

+0

Linuxの場合、すぐに使用できるsyslogまたはsyslog-ngを直接使用することができます。 – ArmenB

答えて

1

あなたはconcurrent.futures.ThreadPoolExecutorをuing、nは労働者のプールを使用してlogging.info()メッセージを実行することができ、nは常にあるべきでは1に等しい:

import concurrent.futures 
import logging 

executor = concurrent.futures.ThreadPoolExecutor(max_workers=1) 

def info(self, msg, *args): 
    executor.submit(logging.info, msg, *args) 
+0

あなたのコードが何をすべきか、それが私の質問にどのように関係しているかを説明できるでしょうか? – Ziva

+0

コード例は、要求されたように、 "info"関数呼び出しの種類の非同期キューを整理する方法を示しています。労働者の数が1に等しいことは非常に重要です。それはあなたに電話の正確な順序を与えるでしょう。 n個以上の場合、予期しない動作が発生する可能性があります。結果ログの行の順序が間違っています。 BR、アンドリュー – tas

関連する問題