здесь время ожидания составляет 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 с. Как я могу это сделать?