Проблема с отложенными задачами appengine, выполнение выдает неизвестную ошибку
Я отложил задачу в appengine python - это простой вызов со всеми строками task_info, списком строк. Это хорошо работает для любого из задач.
deferred.defer(fetch_service,
_queue = "queue_name",
_countdown = task_counter * 4,
**task_info )
Я наблюдал странное поведение, когда я получаю доступ к некоторым конечным точкам или пользовательскому интерфейсу в другом URL или в разных модулях, эти отложенные вызовы начинают давать сбой. Каждый разный вызов вызывает одну и ту же проблему.
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/deferred/deferred.py", line 145, in run
raise PermanentTaskFailure(e)
PermanentTaskFailure: None.fetch_service forbidden in unpickling
Нужна помощь или другие, кто сталкивался с той же проблемой.
2 ответа
Эта проблема специфична для скаффолдов GAE python, предоставленных Google. Есть белый список методов, которые разрешены для маринования.
Если вы добавите свой fetch_service
метод к _PICKLE_CLASS_WHITELIST
в base/api_fixers.py
список, это будет работать.
PermanentTaskFailure
исключение означает, что задача не выполнена и никогда не будет выполнена.
Как правило, это означает, что возникает недопустимое условие, когда инфраструктура GAE пытается запланировать задачу.
None.fetch_service
Строка в сообщении об ошибке указывает на недопустимую ссылку: None
не имеет fetch_service
приписывать.
Это может указывать на попытку выполнения задачи в модуле, который не имеет доступа к fetch_service
объект. Я бы проверил импорт в модуле, отображающем ошибку.