Исключение PermanentTaskFailure
обычно вызывается при выполнении или попытке выполнения задачи, поэтому вы не поймете ее при создании задачи. Если, возможно, если вы сделаете это из другого обработчика выполнения задачи, но в этом случае это будет для задачи постановки в очередь, а не для постановки задачи в очередь. Или, может быть, если у самого себя возникают проблемы? Не уверен - я никогда не получал это в таком случае.
Так что, в лучшем случае, я думаю, что может быть в состоянии поймать его из do_something_with_key()
. Но вы не сможете перехватить его во всех случаях - например, если код задачи не выполняется - исключение отлавливается самим кодом отложенной библиотеки, см. Пример в Проблема с отложенными задачами appengine, броски выполнения неизвестная ошибка .
Мне удалось его поймать (опять же, вероятно, не во всех случаях), но это было после того, как я переключился с библиотеки deferred
на непосредственное использование задач push (что и используется отложенной библиотекой под капотом).
В статье, на которую вы ссылались, обсуждается PermanentTaskFailure
в контексте кода вашего обработчика (преднамеренно), поднимающего исключение для передачи в отложенную библиотеку того, что она не должна ставить в очередь еще одну копию задачи - что она и делает по умолчанию если выполнение задачи завершится неудачно (на основе кода возврата для запроса), пока не будет достигнуто максимальное количество повторных попыток.