У меня есть PHP-скрипт, который работает на Google Cloud Engine, который запускает SQL-запрос, и на выполнение этого запроса иногда уходит более 60 секунд.
Если запрос не может быть возвращен в течение 60 секунд и DeadlineExceededError
генерируется и не перехватывается, запрос прерывается и возвращается 500 внутренняя ошибка сервера. Следующее упомянуто в документации.
Таймер запросов Google App Engine (Java / Python / Go) гарантирует, что запросы имеют конечную продолжительность жизни и не попадают в бесконечный цикл. В настоящее время крайний срок для запросов к экземплярам веб-интерфейса составляет 60 секунд. (Экземпляры бэкэнда не имеют соответствующего ограничения.) Каждое требование, включая разогрев (запрос к / _ah / warmup) и загрузку (заголовок журнала «loading_request = 1»), подпадает под это ограничение.
Я прошел эта ссылка который объясняет, как избежать такой ошибки, но мой запрос выполняется в тяжелой базе данных, что требует времени для получения всех результатов.
У меня вопрос, как я могу увеличить таймер запроса, чтобы иметь возможность запускать долго выполняющиеся задачи. Если это невозможно, есть ли альтернатива для достижения такой цели.
Если ваш код выполняется внутри обработчика запросов, то по умолчанию существует 60-секундный крайний срок, предписанный App-Engine. Вы не можете это изменить. См. Строку «Сроки» / столбец «Автоматическое масштабирование» диаграммы на этой странице в разделе «Типы масштабирования»:
https://developers.google.com/appengine/docs/java/modules/
Однако этот код сможет работать в течение нескольких часов, если вы измените свой модуль на использование «ручного масштабирования» и экземпляра «B1» — «B4». Пример:
по умолчанию / SRC / главная / веб-приложение / WEB-INF / AppEngine-web.xml:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>myapp</application>
<module>default</module>
<version>1</version>
<threadsafe>true</threadsafe>
<instance-class>B1</instance-class>
<manual-scaling>
<instances>1</instances>
</manual-scaling>
</appengine-web-app>
В этом случае ваши запросы обычно не будут задерживаться на несколько часов.
Других решений пока нет …