Я общаюсь с Google API через пакетные запросы через его google-api-python-client
. В пакетных запросах есть ограничения:
- Пакетный запрос не может содержать более 1000 запросов,
- Пакетный запрос не может содержать более 1 МБ полезной нагрузки.
У меня есть случайное количество строк случайной длины в списке, из которого мне нужно создать пакетный запрос, учитывая вышеупомянутые ограничения.
Кто-нибудь знает хороший способ эффективно создавать фрагменты этого исходного списка, которые можно отправить в API Google? Под «эффективно» я подразумеваю отсутствие повторения всех элементов из первой части (с учетом размера полезной нагрузки).
Пока это то, что я имел в виду: взять максимум 1000 штук предметов, построить запрос, посмотреть размер полезной нагрузки. Если больше 1М, берите 500, смотрите размер. Если полезная нагрузка больше, возьмите первые 250 элементов. Если полезная нагрузка меньше, берите 750 шт. И так далее, вы поняли логику. Таким образом, можно было бы получить нужное количество элементов с меньшим количеством итераций, чем создание полезной нагрузки, проверяя ее после каждого добавления.
Я действительно не хочу изобретать велосипед, поэтому, если кто-нибудь знает для этого эффективный встроенный модуль/модуль, сообщите мне об этом.
Размер полезной нагрузки тела можно рассчитать, вызвав _serialize_request, когда вы добавили нужное количество запросов к созданному экземпляру BatchHttpRequest.
См. также документацию по клиентской библиотеке Python API по созданию пакетных запросов.
_serialize_request
снова и снова будет более эффективным, чем повторение одного и того же элемента самостоятельно? - person John La Rooy   schedule 22.06.2015_serialize_request
, чтобы проверить, не превышает ли он максимально допустимый размер . как вы, вероятно, видели,_serialize_request
перебирает все запросы в пакетном объекте, чтобы скомпилировать полезную нагрузку тела в кодировке MIME. Таким образом, итеративное добавление еще одного объекта и получение полезной нагрузки — это огромные накладные расходы, которых я хотел бы избежать, отсюда и мой вопрос. - person karolyi   schedule 22.06.2015