RAII在如何管理资源链的生命周期



我有点像python新手,但我正在python中实现一个基准测试工具,例如,该工具将创建几个相互依赖的资源集。当程序超出范围时,我希望按正确的顺序清理资源。

我来自C++背景,在C++中,我知道我可以用RAII(构造函数、析构函数(做到这一点。

这个问题的模式中的等效模式是什么?有没有一种方法可以在python中进行RAII,或者有更好的方法来解决这个问题?

您可能正在寻找一个上下文管理器,它是一个可以在with语句中使用的对象:

with context() as c:
do_something(c)

当输入with语句时,将计算表达式(在本例中为context()(,并应返回上下文管理器。__enter__()将在上下文管理器上被调用,结果(可能与上下文管理器是同一对象,也可能不是同一对象(被分配给用as指定的变量。无论控件如何退出with主体,都将在上下文管理器上调用__exit__(),并使用指定是否引发异常的参数。

例如:内置的open()应该以这种方式使用,以便在与打开的文件交互后关闭它

使用contextlib可以很容易地定义新的上下文管理器类型。

对于更一次性的解决方案,您可以使用try/finallyfinally块在try块之后执行,无论控制如何退出try块:

try:
do_something()
finally:
cleanup()

最新更新