如何解决如何正确关闭船长原型结构以避免内存泄漏?
我想我有内存问题,我想关闭我使用 pycapnp 读取的文件。最好的方法是如何做到这一点?正在做:
parsing
在我的场景中,我有一个以 captian proto 格式保存的数据集,我想在从中提取我需要的信息后关闭船长 proto 文件(以避免内存问题而不是浪费空间!)。这样做的正确方法是什么,
def __getitem__(self,idx: int) -> DagNode:
# gets the file idx for the value we want
file_idx = self.get_file_index(idx)
file_name = self.list_files_current_split[file_idx]
f = open(file_name)
capnp_file = dag_api_capnp.Dag.read_packed(f,traversal_limit_in_words=2 ** 64 - 1)
# do stuff with it
node = DagNode(capnp_file.field1)
# close both files
capnp_file.finish()
f.close()
return node
提前致谢!
参考:
- http://capnproto.github.io/pycapnp/capnp.html#capnp._DynamicResizableListBuilder.finish
- https://github.com/capnproto/pycapnp/issues/245
- https://github.com/capnproto/pycapnp/issues/251
解决方法
你试过python内存映射文件支持吗? mmap 它的工作方式很像操作系统处理巨大的交换文件。它非常快速和高效。使用 readBytes 收集数据块(猜它是 traversal_limit_in_words ?)
简而言之,所有需要的数据都在您的程序存储空间中适时可用,并且进一步加载数据由 mmap 负责。
希望这有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。