[英]python LMDB large DBs (Memory Limit Error)
我有一个很大的lmdb,大约有80万张图像。 我想一一阅读条目。 我的代码非常简单,看起来像这样:
with env.begin() as txn:
cursor = txn.cursor()
for key, value in cursor:
print(key)
但是在读取大约70000个条目后,它的内存不足(〜10GB)。 我不知道为什么。 我试图像下面那样做,但是没有用。
for r in range(0,env.stat()['entries']):
if r%10000==0:
if r!=0:
txn.commit()
cur.close()
txn=env.begin()
cur = txn.cursor()
print("Change Change Change "+ str(r))
sys.stdout.flush()
if r==0:
cur.first()
else:
cur.set_range(key)
cur.next()
key, value = cur.item()
有什么建议吗?
错误跟踪可能会有所帮助。 我会检查map_size
参数。 从文档 :
数据库的最大大小可能会增加到; 用于确定内存映射的大小。 如果数据库增长到大于map_size,则将引发异常,用户必须关闭并重新打开Environment。 在64位上,使它变大(例如1TB)没有任何惩罚。 在32位上必须小于2GB。
这将是编写时的一个示例:
with lmdb.open(LMDB_DIR, map_size=LMDB_MAX_SIZE) as env:
with env.begin(write=True) as txn:
return txn.put(mykey, value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.