Ошибка AppEngine «явно отменена» - PullRequest
4 голосов
/ 12 февраля 2010

Я использую Google AppEngine и отложенную библиотеку с классом Mapper, как описано здесь (с некоторыми улучшениями, как в здесь ). В некоторых итерациях маппера я получаю следующую ошибку:

CancelledError: The API call datastore_v3.Put() was explicitly cancelled.

Mapper обычно работает нормально, раньше у меня был больший размер пакета, так что он действительно достигал DeadlineExceededError, и это было обработано правильно.

Просто чтобы быть уверенным, я уменьшил размер batch_size до очень низкого числа, чтобы он никогда не достигал DeadlineExceededError, но я все равно получаю CancelledError.

Трассировка стека выглядит следующим образом:

File "utils.py", line 114, in _continue
  self._batch_write()
File "utils.py", line 76, in _batch_write
  db.put(self.to_put)
File "/google/appengine/ext/db/__init__.py", line 1238, in put
  keys = datastore.Put(entities, rpc=rpc)
File "/google/appengine/api/datastore.py", line 255, in Put
  'datastore_v3', 'Put', req, datastore_pb.PutResponse(), rpc)
File "/google/appengine/api/datastore.py", line 177, in _MakeSyncCall
  rpc.check_success()
File "/google/appengine/api/apiproxy_stub_map.py", line 474, in check_success
  self.__rpc.CheckSuccess()
File "/google/appengine/api/apiproxy_rpc.py", line 126, in CheckSuccess
  raise self.exception
CancelledError: The API call datastore_v3.Put() was explicitly cancelled.

Я не могу найти много информации об этой ошибке "explicity отменен", поэтому мне было интересно, что ее вызвало и как ее расследовать.

1 Ответ

1 голос
/ 12 февраля 2010

После DeadlineExceededError вам предоставляется небольшое количество льготного времени для обработки исключения, например, для отсрочки оставшейся части вычисления.

Если у вас закончилось время отсрочки, в игру вступает CancelledError.

Не должно быть способа поймать / обработать CancelledError

...