La documentation Drupal 7 présente l'API Batch en tant que:
Fonctions permettant de répartir le traitement des formulaires sur plusieurs requêtes de page, garantissant ainsi que le traitement ne soit pas interrompu à cause d'un timeout PHP ...
J'ai pris cela pour signifier que Batch gère les problèmes liés au délai d'attente pour le développeur.
Cependant, d'autres publications (par exemple, comment fonctionne l'API batch en interne? ) Impliquent qu'il est de la responsabilité du développeur d'indiquer à Batch la quantité de travail à faire avant d'attendre qu'un autre utilisateur arrive et que Batch soit à nouveau invoqué --- évitant ainsi la temps libre.
Si ce dernier est vrai, je suppose que Batch ne garantit pas que les travaux ne seront pas expirés. Batch offre-t-il des garanties? Est-ce au développeur de deviner combien de batch peut traiter avant la fin du délai?
Je vous remercie!
la source
Réponses:
Batch dit simplement: "Je ferai N nombre de choses (au plus), puis je rafraîchirai la page ... et j'en ferai plus."
Si vous dites faire 5 éléments par tronçon de travail qui prennent 5 secondes chacun, vous seriez d'accord avec la valeur de délai d'expiration php par défaut de 30 secondes.
Si vous dites faire 20 éléments par bloc de travail qui prennent 5 secondes chacun, votre charge de travail par demande est trop élevée et expirera probablement.
Rappelez-vous que lorsque vous êtes en PHP, le cycle de vie d'une page est
request in -> response out
. Et que votre serveur Web maintient chaque thread en vie pendant une durée limitée. Vous devez contourner ce délai d'expiration - ce que l'API Batch vous aide à faire.L'exécution de choses à partir de Say Drush, côté serveur en utilisant des modules de communauté tels que Migrate peut vous aider à éviter complètement les délais d'attente si nécessaire.
ÉDITER
Gardez également à l'esprit que chaque demande de page est un bootstrap drupal complet et que l'API Batch reprend là où elle s'était arrêtée. C'est l'une des opérations les plus coûteuses lors de l'utilisation de l'API Batch, en rechargeant drupal tous les N éléments. C'est pourquoi les gens ont travaillé sur des techniques côté serveur pour créer des nœuds, importer du contenu, etc. L'API Batch est idéale pour les tâches simples et répétitives. Mais il a tendance à s'effondrer dans des ensembles de données complexes ou très très volumineux.
la source
L'API par lots s'enregistre simplement en
_batch_shutdown()
tant que fonction d'arrêt avecregister_shutdown_function()
. Cette fonction enregistre simplement dans une table de base de données l'état actuel du lot en cours d'exécution.L'API Batch ne fournit aucune garantie que l'opération que vous exécutez n'est pas interrompue au milieu. C'est pourquoi les opérations par lots exécutent normalement des opérations simples comme la lecture d'une ligne de base de données à partir de l'enregistrement d'une table et l'enregistrement d'une ligne de base de données dans une autre table.
la source