У меня есть приложение Python, которое выполняет следующие действия:
- Вызывается другим процессом / процессами каждые 2-3 минуты, чтобы сохранить объект с помощью
with shelve.open(shelvefilename, flag='c')
.
- Вызывается другим процессом / процессами много раз в минуту, чтобы прочитать этот полочный файл, используя
with shelve.open(shelvefilename, flag='r')
Проблема в том, что через некоторое время я получаю _gdbm.error: [Errno 11] Resource temporarily unavailable
Ошибка:
File "/path/to/myprog.py", line 755, in mymethod
with shelve.open(shelvefilename, flag='r') as shlvfile:
File "/usr/local/lib/python3.6/shelve.py", line 243, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/usr/local/lib/python3.6/shelve.py", line 227, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "/usr/local/lib/python3.6/dbm/__init__.py", line 94, in open
return mod.open(file, flag, mode)
_gdbm.error: [Errno 11] Resource temporarily unavailable
Я предполагаю, что это произошло потому, что в какой-то момент я открыл файл shelve как для чтения, так и для записи, что является проблемным по определению.
Можно ли как-нибудь обновить файл полки, не нарушая операции чтения?