Я использую Google AppEngine и отложенную библиотеку с классом Mapper
, как описано here (с некоторыми улучшениями, как в here). В некоторых итераций картографа я получаю следующее сообщение об ошибке:Ошибка AppEngine 'явно отменена'
CancelledError: The API call datastore_v3.Put() was explicitly cancelled.
картограф обычно работает нормально, я использовал, чтобы иметь более высокий размер пакета, так что он будет на самом деле попал в 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.
Я не могу найти много информации об этом «отменен» в явной ошибки, поэтому мне было интересно, что стало причиной его и как исследовать.
Я подозревал, что. Тем не менее, класс «Mapper» был разработан для обработки таких вещей. Он даже имеет размер партии по умолчанию 200. Какие вещи влияют на время, которое требуется для 'db.put()' для завершения/возврата? Я предположил, что это был только размер партии, поэтому использование меньших партий (всего 4!) Ускорит старт и избежит «CancelledError». Существуют ли другие вещи, которые заставляют 'db.put()' занимать больше времени, чтобы я мог оптимизировать? (Больше индексов? ListProperties? ReferenceProperties?) – noio
Любая идея, «как мы можем избежать этого?» – Femina
Я не уверен, что этот ответ по-прежнему верен. Я вижу, что эти исключения возникают в Taskqueues (которые имеют 10-минутный временной интервал) примерно через 54 секунды в запросе. – speedplane