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

я есть одна функция, работающая в Google App Engine Flexible, как часть вызова API. Структура примерно такая

import externalmod
...
...

@app.route('/calc_here')
def calc:
answer = externalmod.Method()

return answer

Функция externalmod является сложным алгоритмом (не хранилищем данных, не urlfetch, а просто чистым питоном), который работает для каждого возможного случая на рабочем столе, но для некоторых входных случаев в обработчике приложения, когда вызывается конечная точка, он выдает следующую ошибку

{
 "code": 13,
 "message": "BAD_GATEWAY",
 "details": [
  {
   "@type": "type.googleapis.com/google.rpc.DebugInfo",
   "stackEntries": [],
   "detail": "application"
  }
 ]
}

Посмотрев наhttps://cloud.google.com/appengine/articles/deadlineexceedederrors и следующие обсуждения:Как увеличить таймер запросов Google App Engine. По умолчанию 60 секунд

а такжеhttps://groups.google.com/forum/#!topic/google-appengine/3TtfJG0I9nA

Я понял, что это потому, что движок приложения остановится, если какой-либо запуск кода займет более 60 секунд. Сначала я попытался сделать следующее в соответствии сДолжно ли Exception перехватывать исключения DeadlineExceededError?

from google.appengine.runtime import DeadlineExceededError
try:
   answer = externalmod.Method()
except DeadlineExceededError:
   answer = some_default

но я получил ошибку, что нет модуля google.appengine

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

 try:
   answer = externalmod.Method()
 except :
   answer = some_default

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

Я попытался изменить файл app.yaml, добавив CPU: 2, но ничего не изменилось.

runtime_config:
python_version: 3
resources:
  cpu: 2
  memory_gb: 4
manual_scaling:
  instances: 1

Может быть, этот вопросTaskqueue для длительных задач в FLEXIBLE App Engine

также может иметь аналогичный ответ, но я понятия не имею, что такое очередь задач, и также я не могу ничего поставить в очередь, поскольку критическая функция, которую я выполняю, является автономной, и я не хочу разбивать ее только для некоторых случаев. Мне было бы проще увеличить предел 60 с. Как я могу это сделать?

Ответы на вопрос(1)

Ваш ответ на вопрос