【发布时间】:2019-05-21 18:07:06
【问题描述】:
我有以下 python 代码:
def parse_object(object):
data = object.read()
do_other_stuff(data)
def get_object():
content = "abc"
try:
object = StringIO()
object.write(content)
return object
finally:
object.close()
def main():
object = get_object()
parse_object(object)
parse_object 获取一个文件对象或一个 StringIO 实例,但显然 StringIO 对象在 get_object 结束后立即关闭。
有没有办法在 get_object 使用后关闭对象?
parse_object 无法更改,因为它位于我宁愿不更改的内置库中,get_object 在我的代码中
【问题讨论】:
-
无需关闭
StringIO实例。只需返回它并删除try/finally。 -
但是我想防止内存泄漏,特别是如果我打算这样做数百次...
-
“关闭”资源不会释放它占用的内存。 Python 是垃圾收集器。当一个变量不再使用时,它所占用的空间将被自动释放。对于像
StringIO这样您为自己使用而创建的完全内部资源,此机制运行良好,您不需要做任何特别的事情。只需创建它们,使用它们,不要太担心。对于外部资源(如数据库连接和文件),可能需要手动关闭,这样您就不会占用它们超过需要的时间。但即使在这里,“关闭”也不等于“感受记忆”。
标签: python python-2.7 python-object