1

ランタイム例外が発生したときに他の関数内から呼び出したい「現在の」行番号 (および時間) を報告する次の関数。

当然のことながら、返される行番号は常に gTime() 関数自体内の getframeinfo の位置に関連しています。つまり、静的です。

メインコード本体内で必要な各位置に(長い) gTime コードを直接追加せずに、line.num/time データが必要なときはいつでも gTime() 機能が必要です。gTime() 関数内のコードを置き換えるために、ある種のコマンド シーケンス エイリアスを実際に探していると思いますが、問題の解決策が見つかりません。

標準の「ロガー」モジュールは、私のマルチスレッド アプリケーション内では確実に機能しないため、手巻きのソリューションに頼っています。

from inspect import currentframe, getframeinfo
from datetime import datetime

def gTime():
    position = "%s [%s] - " % (str(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')),getframeinfo(currentframe()).lineno)
    return position 

print gTime()
4

2 に答える 2

0

「標準の「ロガー」モジュールは、マルチスレッドアプリケーション内では確実に機能しないため、手動ソリューションを使用しています。」

ドキュメントが一致しません

ロギングモジュールは、クライアントが特別な作業を行う必要がなく、スレッドセーフであることを目的としています。スレッドロックを使用してこれを実現します。モジュールの共有データへのアクセスをシリアル化するためのロックが1つあり、各ハンドラーは、基盤となるI/Oへのアクセスをシリアル化するためのロックも作成します。

なぜ確実に機能しないのですか?

于 2012-06-29T12:35:50.363 に答える
0

を使用できない場合loggingは、その内部をできる限り使用するか、少なくともそれらから学ぶことをお勧めします。http://hg.python.org/cpython/file/tip/Lib/logging/__init__.pyを参照してください。

特に、logging.currentframe囲みフレームを取得するために使用できます。

from inspect import getframeinfo
from logging import currentframe
from datetime import datetime

def callingFrame():
    return getframeinfo(currentframe())

def gTime():
    position = "%s [%s] - " % (str(datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").rstrip('0')), callingFrame().lineno)
    return position 

print gTime()
于 2012-06-29T12:10:32.737 に答える