python 不安全的包或方法_如何包装不安全的python方法(例如os.chdir公司)在类中使其线程/异常安全?...

线程安全性和异常安全性根本不是一回事。将os.chdir调用包装在这样的类中是为了使其异常安全而不是线程安全。在

异常安全是你经常听到C++开发者谈论的话题。在Python社区中几乎没有人谈论过这个问题。来自Boost的Exception-Safety in Generic Components文档:Informally, exception-safety in a

component means that it exhibits

reasonable behavior when an exception

is thrown during its execution. For

most people, the term “reasonable”

includes all the usual expectations

for error-handling: that resources

should not be leaked, and that the

program should remain in a

well-defined state so that execution

can continue.

因此,您提供的代码片段中的想法是确保在出现异常的情况下,程序将返回到定义良好的状态。在这种情况下,进程将返回到它启动的目录中,是否os.chdir公司它本身失败,或者某些原因导致抛出异常并删除“Chdir”实例。在

这种使用一个仅用于清理的对象的模式是“Resource Acquisition Is Initialization”或“RAII”的形式。这种技术在C++中非常流行,但由于Python的原因,在以下方面不受欢迎:Python有try…finally,它的作用几乎相同,是Python中更常见的习惯用法。在

Python中的析构函数(__del__)在某些实现中是不可靠的/不可预测的,因此不鼓励以这种方式使用它们。在cpython中,只要不涉及循环(即:当删除是通过引用计数处理的)时,它们碰巧非常可靠和可预测的,但在其他实现中(Jython和我相信还有IronPython),当垃圾收集器找到它时,就会删除它,这可能要晚得多。(有趣的是,这并不能阻止大多数Python程序员依赖__del__关闭打开的文件。)Python有垃圾收集,所以您不必像C++那样对清理非常小心。(我不是说你一点都不需要小心,只是在一般情况下,你可以依靠gc为你做正确的事情。)

编写上述代码的一种更“pythonic”方法是:saved_path = os.getcwd()

os.chdir(new_path)

try:

# code that does stuff in new_path goes here

finally:

os.chdir(saved_path)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值