Я разрабатываю приложение в MicroPython на ESP32, где буфер публикуемых данных должен сохраняться при перебоях с питанием / перезагрузках.
BTree кажется очевидным решением, но в моих тестах я могуне удается сохранить данные, записанные в базу данных BTree, фактически они вообще не записываются в файл.
Вот пример кода теста;Я был бы очень признателен, если кто-нибудь может предложить какую-либо помощь, пожалуйста:
import btree
try:
f = open("buffer.db", "r+b")
except OSError:
f = open("buffer.db", "w+b")
db = btree.open(f)
db[b"1"] = b"first"
db[b"2"] = b"second"
db[b"3"] = b"third"
db[b"4"] = b"fourth"
db[b"5"] = b"fifth"
db.flush()
print('The database contains the following:')
for k in db:
key = k.decode('utf-8')
val = db[k].decode('utf-8')
print('Key:', key, 'Value:', val)
print('End of data.')
db.close()
f.close()`
Все это, кажется, работает нормально, с ожидаемым выходным значением для REPL:
The database contains the following:
Key: 1 Value: first
Key: 2 Value: second
Key: 3 Value: third
Key: 4 Value: fourth
Key: 5 Value: fifth
End of data.
Но если язатем попробуйте следующее:
f = open("buffer.db", "r+b")
db = btree.open(f)
print('The database contains the following:')
for k in db:
key = k.decode('utf-8')
val = db[k].decode('utf-8')
print('Key:', key, 'Value:', val)
print('End of data.')
db.close()
f.close()
... выходные данные в REPL:
The database contains the following:
End of data.
При проверке файла БД "buffer.db" он имеет размер 0 байтов.
Я уверен, что я делаю ошибку школьника, но я не могу определить ее на всю жизнь.
Большое спасибо заранее за вашу помощь.
=========
ОБНОВЛЕНИЕ
В дополнение к предложению, в другом месте, я сейчас проверил это на Unix-порт MicroPython (работает на Ubuntu), и этоотлично работает, в том числе успешно записывает данные в файл db Btree.
Очевидно, что это проблема, относящаяся к порту MicroPython для ESP32.