La documentación de Drupal 7 presenta la API de Batch como:
Funciones que permiten que el procesamiento de formularios se distribuya entre varias solicitudes de página, asegurando así que el procesamiento no se interrumpa debido a un tiempo de espera de PHP ...
Tomé esto como que Batch maneja los problemas relacionados con el tiempo de espera para el desarrollador.
Sin embargo, otras publicaciones (es decir, ¿cómo funciona internamente la API por lotes? ) Implican que es responsabilidad del desarrollador decirle a Batch cuánto trabajo hacer antes de esperar que llegue otro usuario y que Batch sea invocado nuevamente, evitando así se acabó el tiempo.
Si esto último es cierto, supongo que Batch no garantiza que los trabajos no se agotarán. ¿Batch ofrece alguna garantía? ¿Depende del desarrollador adivinar cuánto puede procesar Batch antes de que se agote el tiempo de espera?
¡Gracias!
fuente
Respuestas:
Batch simplemente dice "Haré N cantidad de cosas (como máximo) y luego actualizaré la página ... y haré más".
Si dice hacer 5 elementos por porción de trabajo que demoran 5 segundos cada uno, estaría bien con el valor predeterminado de tiempo de espera de php de 30 segundos.
Si dice hacer 20 elementos por porción de trabajo que toman 5 segundos cada uno, su carga de trabajo por solicitud es demasiado alta y es probable que se agote el tiempo de espera.
Recuerda cuando estás en PHP, el ciclo de vida de una página es
request in -> response out
. Y que su servidor web mantiene vivo cada hilo durante un tiempo finito. Debe evitar ese tiempo de espera, lo que la API de Batch le ayuda a hacer.Ejecutar cosas de, por ejemplo, Drush, el lado del servidor que usa módulos comunitarios como Migrate puede ayudarlo a evitar por completo los tiempos de espera si es necesario.
EDITAR
También tenga en cuenta que cada solicitud de página es un bootstrap completo de drupal y la API de Batch comienza donde se quedó. Esa es una de las operaciones más caras cuando se usa la API de Batch, recargar drupal cada N elementos. Es por eso que la gente ha estado trabajando en técnicas del lado del servidor para crear nodos, importar contenido, etc. Batch API es ideal para tareas simples y repetitivas. Pero tiende a desmoronarse en conjuntos de datos complejos o muy muy grandes.
fuente
La API por lotes simplemente se registra
_batch_shutdown()
como función de apagado conregister_shutdown_function()
. Esa función simplemente guarda en una tabla de base de datos el estado actual del lote que se está ejecutando.Batch API no proporciona ninguna garantía de que la operación que está ejecutando no se interrumpa en el medio. Es por eso que las operaciones por lotes normalmente ejecutan operaciones simples como leer una fila de la base de datos al guardar una tabla y guardar una fila de la base de datos en otra tabla.
fuente