[英]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.