以下函数报告当前发生运行时异常时我想从其他函数中调用的“当前”行号(和时间)。
可以理解,返回的行号始终与gTime()函数本身中getframeinfo的位置有关,即它是静态的。
每当我需要line.num / time数据时,我只想要gTime()功能而不直接将(long)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()
答案 0 :(得分: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()
答案 1 :(得分:0)
“标准'记录器'模块在我的多线程应用程序中无法可靠运行,因此我采用手动解决方案。”
日志记录模块用于线程安全,没有任何特殊之处 需要由客户完成的工作。它虽然使用它实现了这一点 穿线锁;有一个锁可以序列化对模块的访问 共享数据,每个处理程序还创建一个锁以序列化访问 它的基础I / O.
为什么它不能可靠地运作?