Как исправить отложенные задачи, отправляемые на неинициализированный экземпляр? - PullRequest
0 голосов
/ 18 января 2019

Мой веб-сайт Google AppEngine использует отложенные задачи для выполнения дополнительной работы. Иногда количество отложенных задач приводит к созданию нового экземпляра. Когда это происходит, все задачи, делегированные этому новому экземпляру, завершаются сбоем, поскольку они отправляются туда до того, как экземпляр сможет инициализироваться. Если до запуска задач уже запущено достаточное количество экземпляров, проблем не возникает.

Вот пример одной из неудачных задач:

Permanent failure attempting to execute task (/.../google/appengine/ext/deferred/deferred.py:327)
Traceback (most recent call last):
  File "/.../google/appengine/ext/deferred/deferred.py", line 318, in post
    self.run_from_request()
  File "/.../google/appengine/ext/deferred/deferred.py", line 313, in run_from_request
    run(self.request.body)
  File "/.../google/appengine/ext/deferred/deferred.py", line 153, in run
    raise PermanentTaskFailure(e)
PermanentTaskFailure: No module named django

Есть ли способ заставить отложенную систему подождать, пока экземпляр полностью инициализируется, прежде чем отправлять ему задачи? Я теряю волосы из-за этой проблемы.

1 Ответ

0 голосов
/ 18 января 2019

GAE запросы на разогрев предназначены именно для этого:

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

Вам просто нужно:

...