#python #google-app-engine #google-compute-engine #task-queue
#python #google-app-engine #google-compute-engine #очередь задач
Вопрос:
У меня есть Python, процесс, арендующий задачи из Google TaskQueue REST API каждую секунду в неограниченном цикле:
credentials = GoogleCredentials.get_application_default()
task_api = googleapiclient.discovery.build('taskqueue', 'v1beta2', credentials=credentials)
while True:
tasks = task_api.tasks().lease(...).execute()
time.sleep(1)
Иногда процесс хорошо выполняется в течение нескольких часов. Но иногда часто происходит сбой из-за одной из ошибок HTTP:
- Ошибка серверной части 500
- Ошибка сервера 503
- 500 Произошла внутренняя ошибка в серверной части
Процесс выполняется на сервере Google Computing Engine. Он использует ключ учетной записи службы, указанный переменной GOOGLE_APPLICATION_CREDENTIALS env. Это ошибка очереди задач Google или я что-то пропустил? Например. нужно ли мне перечитывать учетные данные перед каждым запросом на аренду?
Комментарии:
1. ошибка сервера — защита от наводнений google рекомендует реализовать экспоненциальный откат.
2. @DalmTo можете ли вы опубликовать ссылку на какую-либо документацию?
3. У вас двоих есть возможности поиска в Google. Ошибки Google являются общесистемными, они хороши для всех API developers.google.com/drive/v3/web /…
4. Хм, речь идет о Google Диске, не знал, что это применимо и к движку приложений Google.
5. Как я уже сказал, «Ошибки Google являются общесистемными, это хорошо для всех API» ошибки 400 и 500 являются стандартными в системах Googles, за исключением странных ошибок 400, которые могут быть специфичными для API. так что да, это относится к ошибкам app engine 500. ошибки 500 — это способ сервера сообщить вам, что вы собираетесь поститься, или сбой сервера, подождите секунду и повторите попытку. для его запуска и ответа редко требуется более 6 попыток.
Ответ №1:
Поскольку @DalmTo только что ответил в комментариях, я суммирую его ответы и добавляю решение Python.
Ошибка, вызванная поддержкой Google 5xx, — это защита от наводнений, и Google рекомендует реализовать экспоненциальный откат. Несмотря на ссылки, указывающие на API Google Drive, ошибки Google являются общесистемными для всех API (включая GAE). Для его запуска и ответа редко требуется более 6 попыток.
После изучения источников googleapiclient я обнаружил, что экспоненциальный откат уже реализован в этой библиотеке, поэтому решение очень простое:
tasks = task_api.tasks().lease(...).execute(num_retries=6)
Источники http.py::_should_retry_response()
показывают, что помимо ошибок HTTP 5xx запрос повторяется также, когда ответ JSON содержит userRateLimitExceeded
rateLimitExceeded
ошибку или.