Python是否有自动资源管理?
所有版本的Java都需要用户手动关闭资源,通常是在finally块中处理的。Java 7即将引入一种叫做ARM(自动资源管理)的新特性。
- 首先,我在Python中没有看到finally块的概念。难道你是在每次抛出异常时在catch中关闭资源吗?
- Python中有没有库可以实现自动资源管理?如果没有,那么在Python中实现自动资源管理的正确方式是什么?
2 个回答
2
在Python中,有一些自动管理资源的功能。大多数打开资源的对象在被垃圾回收时会自动关闭这些资源。但具体什么时候会发生垃圾回收是不确定的,有时候甚至可能根本不会发生。所以这种方式只适合在你不使用太多资源、也不在乎资源开着多久的情况下使用,反正程序结束时操作系统会帮你关闭这些资源。
如果不是这种情况,建议使用上下文管理器和with语句,像Matthew的回答中提到的那样。
下面是一个简单的例子,演示如何重定向标准输出:
>>> import sys
>>> class redirect_stdout:
... def __init__(self, target):
... self.stdout = sys.stdout
... self.target = target
...
... def __enter__(self):
... sys.stdout = self.target
...
... def __exit__(self, type, value, tb):
... sys.stdout = self.stdout
...
>>> from StringIO import StringIO
>>> out = StringIO()
>>> with redirect_stdout(out):
... print 'Test'
...
>>> out.getvalue() == 'Test\n'
True
10
在Python中,有一种结构叫做try: except: finally:。
你还可以使用with: 语句,我觉得这正是你想要的,特别是在ARM方面。这些被称为上下文管理器。 http://www.python.org/dev/peps/pep-0343/