Следите за использованием ключа, пока не упёрлись в лимит
Наблюдение за заголовками квоты по ходу работы показывает приближение к лимиту задолго до того, как запрос будет отклонён.
Значение таймаута, которое отлично подходит для поиска одного адреса, оборвёт пакетный запрос с несколькими тысячами элементов задолго до того, как сервер закончит их все обрабатывать, и это выглядит как сбой, хотя при достаточном времени запрос завершился бы.
Каждый элемент пакетного массива это самостоятельный поиск, поэтому запрос с 2 000 элементами требует примерно в 2 000 раз больше обработки, чем одиночный поиск, хотя с вашей стороны это один HTTP-вызов. Таймаута в одну-две секунды, разумного для одного адреса, для запроса такого размера совершенно недостаточно.
Задавайте таймаут клиента пропорционально размеру отправляемого массива, с некоторым запасом на обычные колебания, а не используйте одно фиксированное значение для всех запросов вашего кода, маленьких и больших.
timeout_seconds = max(5, item_count * 0.05)Это отправная точка для настройки по собственным наблюдениям, а не фиксированное число, которое следует считать истиной, поскольку реальное время обработки одного элемента не является опубликованной гарантией.
Вместо того чтобы всё сильнее увеличивать таймаут ради всё более крупного единого запроса, разбейте очень большую задачу на части по несколько сотен или несколько тысяч элементов. Небольшим частям нужны более короткие и предсказуемые таймауты, а сбой посередине обойдётся вам только текущей частью, а не всей задачей.
Если запрос всё-таки прервался по таймауту на вашей стороне, вы можете не знать, закончил ли сервер его обработку. Вместо того чтобы вслепую отправлять ту же часть повторно, что может дважды списать квоту, если исходный запрос всё же завершился, проверьте заголовки квоты из последнего успешного вызова, чтобы оценить, прошла ли, скорее всего, прерванная часть, и отправляйте повторно осторожно.
Таймаут это исключительно настройка на стороне клиента о том, сколько вы готовы ждать. Он никак не влияет на стоимость запроса, по-прежнему один запрос за каждый обработанный элемент, независимо от того, дождался ли ваш клиент до конца или сдался раньше.
Соответствие таймаута размеру пакета и предпочтение нескольких небольших частей одному очень большому запросу делают крупные задачи надёжными и позволяют легко возобновить их, если что-то пошло не так. Разбиение на части и стратегия работы с квотой для крупных задач подробнее описаны в документации по лимитам запросов.