Controla el uso de tu clave antes de alcanzar un límite
Vigilar las cabeceras de cuota sobre la marcha te indica cuándo te acercas a un límite, mucho antes de que se rechace realmente una solicitud.
Un tiempo de espera que funciona bien para la consulta de una sola dirección cortará una solicitud masiva con unos pocos miles de elementos mucho antes de que el servidor haya terminado de procesarlos todos, lo que parece un fallo aunque la solicitud se habría completado con tiempo suficiente.
Cada elemento de una matriz masiva es una consulta en sí misma, así que una solicitud con 2.000 elementos implica aproximadamente 2.000 veces el procesamiento de una sola consulta, aunque desde tu lado sea una única llamada HTTP. Un tiempo de espera de uno o dos segundos, razonable para una sola dirección, no se acerca ni de lejos a lo necesario para una solicitud de ese tamaño.
Configura el tiempo de espera de tu cliente en proporción al tamaño de la matriz que envías, con cierto margen para la variación habitual, en lugar de usar un único valor fijo para todas las solicitudes que hace tu código, pequeñas o grandes.
timeout_seconds = max(5, item_count * 0.05)Es un punto de partida que debes ajustar según el comportamiento que observes, no una cifra fija que tratar como definitiva, ya que el tiempo real de procesamiento por elemento no es una garantía publicada.
En lugar de subir cada vez más los tiempos de espera para dar cabida a una única solicitud cada vez más grande, divide un trabajo muy grande en fragmentos de entre unos cientos y unos pocos miles de elementos cada uno. Los fragmentos pequeños necesitan tiempos de espera más cortos y predecibles, y un fallo a mitad de camino solo te cuesta el fragmento actual y no el trabajo entero.
Si una solicitud agota el tiempo de espera en tu lado, es posible que no sepas si el servidor terminó de procesarla o no. En lugar de volver a enviar a ciegas el mismo fragmento, lo que podría contar dos veces contra tu cuota si la solicitud original sí se completó, revisa las cabeceras de cuota de tu última llamada correcta para estimar si el fragmento que agotó el tiempo probablemente se procesó, y vuelve a enviarlo con cautela.
Un tiempo de espera es solo una configuración del lado del cliente sobre cuánto estás dispuesto a esperar. No tiene ningún efecto en lo que cuesta una solicitud, que sigue siendo una solicitud por cada elemento procesado, tanto si tu cliente esperó todo el tiempo como si se rindió antes.
Ajustar el tiempo de espera al tamaño del lote, y preferir varios fragmentos pequeños a una solicitud muy grande, hace que los trabajos grandes sean fiables y fáciles de reanudar si algo sale mal. La estrategia de fragmentación y de cuota para trabajos grandes se trata con más detalle en la documentación sobre límites de frecuencia.