Мое приложение должно выполнять множество операций с хранилищем данных по каждому запросу. Я хотел бы запустить их параллельно, чтобы улучшить время отклика.
Для обновлений хранилища данных я выполняю пакетную установку, поэтому все они происходят асинхронно, что экономит много миллисекунд. App Engine позволяет обновлять до 500 объектов. в параллели.
Но я не нашел встроенной функции, которая позволяла бы выполнять выборки из хранилища данных разных типов параллельно.
Поскольку App Engine позволяет вызовам urlfetch выполняться асинхронно, я создал URL-адрес получателя для каждого типа, который возвращает результаты запроса в виде текста в формате JSON. Теперь мое приложение может выполнять асинхронные вызовы urlfetch для этих URL-адресов, которые могут распараллеливать выборки из хранилища данных.
Этот метод хорошо работает с небольшим количеством параллельных запросов, но App Engine выдает ошибки при попытке выполнить более 5 или 10 таких вызовов urlfetch одновременно.
Я сейчас только тестирую, поэтому каждый urlfetch - это идентичный запрос; поскольку они отлично работают в небольших объемах, но начинают терпеть неудачу при более чем нескольких одновременных запросах, я думаю, что это должно иметь какое-то отношение к вызовам async urlfetch.
Мои вопросы:
- Есть ли ограничение на количество вызовов urlfetch.create_rpc (), которые могут выполняться асинхронно?
- Синхронная функция urlfecth.fetch () имеет параметр «крайний срок», который позволяет функции ждать ответа до 10 секунд перед ошибкой. Есть ли способ сообщить urlfetch.create_rpc (), как долго ждать ответа?
- Что означают ошибки, показанные ниже?
Есть ли лучший способ на стороне сервера для параллельного выполнения различных видов выборки из хранилища данных?
Файл "/base/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", строка 501, в get_result return self .__ get_result_hook (self) File "/ base / python_lib / versions / 1 / google / appengine / api /urlfetch.py ", строка 331, в _get_fetch_result raise DownloadError (str (err)) InterruptedError: ('Запрос Wait () был прерван исключением из другого обратного вызова:', DownloadError ('ApplicationError: 5',))