繁体   English   中英

如果我读取一个元组而不是单个值,Python 泄漏 memory

[英]Python leaks memory if I read a tuple instead of single value

我正在使用 Python 查询 RocksDB 数据库中是否存在密钥。 API(见底部)意味着它返回一个二元素元组。 所以我收到了两个元组元素:

def contains_key(database: rocksdb, key: int) -> bool:
    found, data = database.key_may_exist(key)
    return found

我正在这样使用它:

if not contains_key(database, key):

但是,这会导致 memory 泄漏。

为了证明这一点,如果我将代码更改为:

def contains_key(database: rocksdb, key: int) -> bool:
    return database.key_may_exist(key)

没有泄漏(但显然不正确)。

如何让第一个版本在没有 memory 泄漏的情况下工作?

在此处输入图像描述

你的代码

def contains_key(database: rocksdb, key: int) -> bool:
    found, data = database.key_may_exist(key)
    return found

不包含 memory 泄漏。

founddata是本地 scope 中的两个名称,均指 memory 单个区域中存在的值。 当function返回时, found scope中的data go。 调用者可以引用found的内容( x = contains_key(db, 3) ),但忽略data 由于不存在对 object 的其他引用,因此 Python(作为垃圾收集语言)会自动回收用于data的任何资源。

就此而言, key_may_exist方法返回一个您永远无法安全引用的元组。 它立即被解包, founddata引用了该元组所引用的任何内容。 元组本身是垃圾收集的,但对其内容的引用仍然存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM