gpt4 book ai didi

python - 如何 pickle 记录器?

转载 作者:太空狗 更新时间:2023-10-29 21:17:03 26 4
gpt4 key购买 nike

从事的项目要求我能够在任何时候 pickle 容器对象,因为我们希望它在外部条件下经常失败并且能够完全从我们停止的地方开始。

我非常广泛地使用 python 日志记录库,我的所有类(class)都从设置一个记录器开始,例如:

class foo:
def __init__(self):
self.logger = logging.getLogger("package.foo")

因为我正在 pickle 一个容器类,它里面有好几层类,每层都有自己的记录器实例。

现在,出于某种原因,这些记录器正在破坏 Pickle。我收到以下错误,如果我从所有类中删除 self.logger,该错误就会消失:

Can't pickle 'lock' object: <thread.lock object at ... >

所以我的问题是是否有某种方法可以从所有记录器中删除锁定对象,而不必通过我的整个对象树递归删除记录器,我将不得不在 unpickle 上重新创建这些记录器。

最佳答案

您还可以创建一个类来实现返回所需记录器的属性。从这个“LoggerMixin”继承的每个类现在都可以像以前一样使用记录器。

class LoggerMixin():
@property
def logger(self):
component = "{}.{}".format(type(self).__module__, type(self).__name__)
return logging.getLogger(component)

class Foo(LoggerMixin):
def __init__(self):
self.logger.info("initialize class")

def bar(self):
self.logger.info("execute bar")

关于python - 如何 pickle 记录器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3375443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com