提供其他对象清理功能的包。
cleanupd的Python项目详细描述
cleanup模块提供有助于释放no的原语 以异常安全的方式使用更长的资源。尤其是 定义defer,当用作上下文管理器时,该函数将执行以下操作 作为注册已获取资源的清理函数的对象。 例如:
client=Client()withdefer()asd:obj=Object()d.defer(obj.destroy)obj.register(client)d.defer(obj.unregister,client)# Alternative syntax:# d.defer(lambda: obj.unregister(client))raiseException()
在这里,defer创建一个上下文对象d,它保证 在块退出时释放(即使面对异常)。它是 用于在对象之后“延迟”调用obj.destroy。 被创造出来了。这样,物体就一定会被摧毁 是的。此外,该对象已注册到客户端。这个 应该在对象消失之前取消注册 “defer”操作用于注册unregister调用。 这个例子还说明了另一个重要的事实:执行 各种清理例程的发生顺序与它们的注册顺序相反。 在大多数感兴趣资源的情况下,此属性非常重要 有依赖性。
有时只有在发生错误时才需要清理。也就是说,如果 所有操作(资源获取等)都成功,我们不希望 向后滚动并松开其中的一部分。为此,延迟上下文可以是 “释放”,在这种情况下,在块退出后不会发生清理。回访 以上示例:
client=Client()withdefer()asd:obj=Object()d.defer(obj.destroy)obj.register(client)d.defer(lambda:obj.unregister(client))# Do some action that potentially raises an error.# If we got here we want to keep the object created and registered# with the client.d.release()
这种机制不仅在上下文的层次上工作,而且在 个别延迟功能:
client=Client()withdefer()asd:obj=Object()f=d.defer(obj.destroy)# Do some action that potentially raises an error.f.release()
安装
cleanup包没有任何外部依赖项。在 为了使用它,只需要让python知道它,例如 将src/目录的路径添加到PYTHONPATH 环境变量。
如果使用Gentoo Linux,则 ebuild可用 可直接使用。
支架
该模块用python 3进行了测试。没有工作要确保 与Python2兼容。