0

我想我有内存问题,我想关闭我使用 pycapnp 读取的文件。最好的方法是如何做到这一点?是在做:

    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

在我的场景中,我有一个以 captian proto 格式保存的数据集,我想在从中提取我需要的信息后关闭 Captain proto 文件(以避免内存问题而不是浪费空间!)。这样做的正确方法是什么,

.finish()

方法保证做到这一点?我不必打电话给垃圾收集器……对吧?

提前致谢!

参考:

4

1 回答 1

0

你试过python内存映射文件支持吗? mmap 它的工作方式很像 os 处理巨大的交换文件。它非常快速和高效。使用 readBytes 收集数据块(猜它是 traversal_limit_in_words 吗?)

简而言之,所有需要的数据都在您的程序存储空间中的正确时间可用,并且数据的进一步加载由 mmap 负责。

希望这可以帮助!

于 2021-05-07T19:30:06.270 回答