Технически у вас нет конфликта, поскольку вы работаете в разных группах сущностей.
Однако есть место для потенциальных конфликтов, пока оба межгрупповых транзакционных вызова все еще находятся в прогресс - вы еще не знаете, не получит ли один из них доступ к объекту, которого коснулся другой. Кстати, доступ не должен быть просто записью сущности (вызывающей конфликты), он также может быть чтением сущности (вызывающей конкуренцию), см. Проблемы с конфликтами в Google App Engine .
Но как только завершится транзакционный вызов, я бы ожидал, что его транзакция завершится (так или иначе, в данном случае это не очень актуально), не дожидаясь завершения какого-либо другого транзакционного вызова, который все еще выполняется, независимо от того, запущен ли он. раньше или нет. Наблюдаемое поведение - тот факт, что транзакционный вызов, готовый к завершению, продолжает ожидать какого-либо другого транзакционного вызова, все еще выполняющегося - может привести к серьезному снижению производительности приложения. Если что-то не было пропущено, это, вероятно, указывало бы на какую-то ошибку.
Одна вещь, которую можно попробовать (только в качестве эксперимента), - заставить две транзакции выполняться разными экземплярами GAE путем настройки * 1011. *automatic_scaling
с max_concurrent_requests
, установленным на 1 в файле app.yaml
:
Необязательно. Число одновременных запросов, которое может принять автоматический c экземпляр масштабирования до того, как планировщик создаст новый экземпляр (по умолчанию: 10, максимум: 80).
...
Мы рекомендуем не устанавливайте max_concurrent_requests
менее 10 , если вам не нужна однопоточность. Значение меньше 10, вероятно, приведет к тому, что будет создано больше экземпляров, чем нужно для многопоточного приложения, и это может привести к ненужным затратам.
Выполнение в отдельных экземплярах обеспечит полную изоляцию клиентский контекст. Если симптом исчезнет, проблема на стороне клиента, возможно в облачной библиотеке ndb - возможно, какая-то (нежелательная) сериализация? Я бы подал вопрос на https://github.com/googleapis/python-ndb (я просканировал выпуски , поданные за последние несколько месяцев, все еще открытые, а также недавно слитые PR, я ничего не заметил очевидно связанный).
Если симптом сохраняется для транзакций от разных изолированных клиентов, значит, проблема где-то на стороне хранилища данных. Может быть, связано с переходом из старого хранилища данных в хранилище в режиме хранилища данных? - Я думаю Я бы заметил такое поведение со старым хранилищем данных, перед переходом я провел обширное тестирование для своего приложения, интенсивного для транзакций. Я бы подал вопрос на https://issuetracker.google.com/.