In der Drupal 7-Dokumentation wird die Batch-API wie folgt eingeführt:
Funktionen, mit denen die Formularverarbeitung auf mehrere Seitenanforderungen verteilt werden kann, um sicherzustellen, dass die Verarbeitung nicht aufgrund eines PHP-Timeouts unterbrochen wird ...
Ich habe dies so verstanden, dass Batch die Timeout-Probleme für den Entwickler behandelt.
Andere Beiträge (z. B. wie funktioniert die Batch-API intern? ) Implizieren jedoch, dass es in der Verantwortung des Entwicklers liegt, Batch mitzuteilen, wie viel Arbeit zu tun ist, bevor auf das Eintreffen eines anderen Benutzers gewartet und Batch erneut aufgerufen wird Auszeit.
Wenn letzteres zutrifft, gehe ich davon aus, dass Batch nicht garantiert, dass Jobs nicht abgelaufen sind. Bietet Batch Garantien? Ist es Sache des Entwicklers, zu erraten, wie viel Batch verarbeitet werden kann, bevor das Zeitlimit überschritten wird?
Vielen Dank!
quelle
Antworten:
Batch sagt einfach: "Ich werde (höchstens) N Dinge tun und dann eine Seitenaktualisierung durchführen ... und mehr tun."
Wenn Sie sagen, dass Sie 5 Elemente pro Jobblock ausführen, die jeweils 5 Sekunden dauern, ist der Standard-PHP-Timeout-Wert von 30 Sekunden in Ordnung.
Wenn Sie sagen, dass Sie 20 Elemente pro Jobblock ausführen, die jeweils 5 Sekunden dauern, ist Ihre Arbeitslast pro Anforderung zu hoch und es tritt wahrscheinlich eine Zeitüberschreitung auf.
Denken Sie daran, wenn Sie in PHP sind, ist der Lebenszyklus einer Seite
request in -> response out
. Und dass Ihr Webserver jeden Thread für eine begrenzte Zeit am Leben hält. Sie müssen dieses Zeitlimit umgehen - was Ihnen die Batch-API hilft.Wenn Sie beispielsweise Drush auf der Serverseite ausführen und Community-Module wie Migrate verwenden, können Sie bei Bedarf Zeitüberschreitungen vollständig vermeiden.
BEARBEITEN
Denken Sie auch daran, dass jede Seitenanforderung ein vollständiger Drupal-Bootstrap ist und die Batch-API dort beginnt, wo sie aufgehört hat. Dies ist eine der teuersten Operationen bei Verwendung der Batch-API, bei der Drupal alle N Elemente neu geladen wird. Aus diesem Grund haben Benutzer an serverseitigen Techniken gearbeitet, um Knoten zu erstellen, Inhalte zu importieren usw. Die Batch-API eignet sich hervorragend für einfache, sich wiederholende Aufgaben. Es neigt jedoch dazu, entweder in komplexen oder in sehr sehr großen Datensätzen auseinanderzufallen.
quelle
Die Batch-API registriert sich einfach
_batch_shutdown()
als Shutdown-Funktion beiregister_shutdown_function()
. Diese Funktion speichert lediglich in einer Datenbanktabelle den aktuellen Status des ausgeführten Stapels.Die Stapel-API bietet keine Garantie dafür, dass der von Ihnen ausgeführte Vorgang nicht in der Mitte unterbrochen wird. Aus diesem Grund führen Stapeloperationen normalerweise einfache Operationen aus, z. B. das Lesen einer Datenbankzeile aus dem Speichern einer Tabelle und das Speichern einer Datenbankzeile in einer anderen Tabelle.
quelle