У меня есть приложение Python, развернутое на Google Cloud Platform. На заднем плане находится хранилище данных Google Cloud с двумя типами. Я использую NDB для извлечения данных в приложение.
class AttEvent(ndb.Model):
event = ndb.StringProperty()
matchdate = ndb.DateTimeProperty()
class MainPage(webapp2.RequestHandler):
def get(self):
query = AttEvent.query().order(AttEvent.matchdate)
for q in query.fetch():
try:
# application code
Один из видов (AtEvent в коде выше) доставляет мне неприятности. Приложение будет развернуто и работать как положено в течение нескольких часов / дней, но затем периодически прекращает возвращать данные. Отладка показывает, что объект q является допустимым объектом типа AttEvent, но для каждого из элементов в коллекции values он говорит: «(У объекта нет полей)». Когда код приложения пытается сослаться на свойство модели (например, q.event), происходит сбой.
Запрос неожиданно начнет работать снова, минуты / часы спустя, даже если я не буду предпринимать никаких действий. Я не вижу никакой картины или видимой причины. Очевидно, что это не идеально с точки зрения пользователя.
Вид, вызывающий проблемы, - это статические данные, которые на самом деле содержат только 3 объекта. Другой тип является транзакционным, содержит тысячи записей, но никогда не проявлял такого же поведения.
Прерывистый характер ошибки заставляет меня верить, что это как-то связано с кэшированием, но я довольно плохо знаком с Python и GCP, поэтому не совсем уверен. Я пытался сделать context.clear_cache () перед запросом, но это не имеет никакого эффекта.
Я что-то упускаю из виду?