Если ваша структура представляет собой дерево папок / файлов, попробуйте получить блокировку от корня до листьев и затем выполните вашу операцию.Используйте ReadAndWriteLock для каждого элемента.
Если вы читаете, используйте readlock.Если вы пишете, используйте блокировку чтения для родителей, за исключением родительского элемента и самого элемента.С ними используйте блокировку записи.
Когда вы получаете что-то, получите блокировку (создавая ее при необходимости), возьмите данные (читая их, если не в кеше), сделайте это и снимите блокировку.
Древовидная блокировка, фиксирующая блокировки чтения для родителей и блокирующая запись только для изменяемых элементов, дает вам возможность одновременного доступа, но исправляет блокировку при изменении.
Образцы
Обновить / a / b / c / d
lock for a - grab read lock
lock for b - grab read lock
lock for c - gran read lock
lock for d - grab write lock
создать / удалить / a / b / c / d
lock for a - grab read lock
lock for b - grab read lock
lock for c - gran **write** lock // you are modifying c's list of files
список / a / b / c / d
lock for a - grab read lock
lock for b - grab read lock
lock for c - gran read lock
lock for d - grab read lock
Примечание
Я действительно не знаю, как лучше всего реализовать это в GAE.Это работает, если у вас есть уникальные замки для каждого предмета.В случае GAE ... я не знаю, можете ли вы получить это.