Die experimentelle Funktion experimental.executions.map
in Workflows startet für jedes entsprechende Argument eine Workflowausführung und wartet, bis alle Ausführungen abgeschlossen sind. Sie gibt eine Liste zurück, in der jedes Element das Ergebnis einer Ausführung ist.
Wenn Sie experimental.executions.map
zur Unterstützung paralleler Arbeit verwenden, können Sie Ihren Workflow migrieren, um stattdessen parallele Schritte zu verwenden, bei denen normale for
-Schleifen parallel ausgeführt werden.
Mit einem parallel
-Schritt wird ein Teil des Workflows definiert, in dem zwei oder mehr Schritte gleichzeitig ausgeführt werden können. Ein parallel
-Schritt wartet, bis alle darin definierten Schritte abgeschlossen sind oder durch eine unbehandelte Ausnahme unterbrochen werden. Die Ausführung wird dann fortgesetzt. Wie bei experimental.executions.map
ist die Ausführungsreihenfolge nicht garantiert. Weitere Informationen finden Sie auf der Syntaxreferenzseite für parallele Schritte.
Für die Verwendung von experimental.executions.map
oder workflows.executions.run
ist ein zusätzliches Kontingent für gleichzeitige Ausführungen erforderlich.
Wenn Sie jedoch parallele Schritte mit Inline-Aufrufen von Connectors verwenden (siehe Beispiel für Übersetzungs-Connector), ist kein zusätzliches Ausführungskontingent erforderlich.
Die folgenden Beispiele sollen Ihnen helfen, die Verwendung von experimental.executions.map
durch einen parallel
-Schritt zu ersetzen.
Übersetzungsworkflow
Der folgende Workflow mit dem Namen translate
verwendet den Cloud Translation-Connector, um einen Eingabetext in eine bestimmte Quell- und Zielsprache zu übersetzen und das Ergebnis zurückzugeben. Die Cloud Translation API muss aktiviert sein.
YAML
main: params: [args] steps: - basic_translate: call: googleapis.translate.v2.translations.translate args: body: q: ${args.text} target: ${args.target} format: "text" source: ${args.source} result: r - return_step: return: ${r}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "basic_translate": { "call": "googleapis.translate.v2.translations.translate", "args": { "body": { "q": "${args.text}", "target": "${args.target}", "format": "text", "source": "${args.source}" } }, "result": "r" } }, { "return_step": { "return": "${r}" } } ] } }
Eingabe für das vorherige Beispiel:
{ "text": "Bonjour", "target": "en", "source": "fr" }
Die Ausgabe sollte in etwa so aussehen:
{ "data": { "translations": [ { "translatedText": "Hello" } ] } }
Workflow für die Batchübersetzung mit experimental.executions.map
Im folgenden Workflow wird eine Gruppe von Texten übersetzt. Für jede Eingabe führt experimental.executions.map
den zuvor erstellten translate
-Workflow aus.
YAML
main: steps: - init: assign: - workflow_id: "translate" - texts_to_translate: - text: "hello world!" source: "en" target: "fr" - text: "你好 世界!" source: "zh-CN" target: "en" - text: "No hablo español!" source: "es" target: "en" - translate_texts: call: experimental.executions.map args: workflow_id: ${workflow_id} arguments: ${texts_to_translate} result: translated - return: return: ${translated}
JSON
{ "main": { "steps": [ { "init": { "assign": [ { "workflow_id": "translate" }, { "texts_to_translate": [ { "text": "hello world!", "source": "en", "target": "fr" }, { "text": "你好 世界!", "source": "zh-CN", "target": "en" }, { "text": "No hablo español!", "source": "es", "target": "en" } ] } ] } }, { "translate_texts": { "call": "experimental.executions.map", "args": { "workflow_id": "${workflow_id}", "arguments": "${texts_to_translate}" }, "result": "translated" } }, { "return": { "return": "${translated}" } } ] } }
Die Ausgabe sollte in etwa so aussehen:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!" } ] } } ]
experimental.executions.map
durch eine for:in
-Schleife ersetzen
Anstelle der experimentellen Funktion können Sie eine parallele for:in
-Schleife verwenden, um den Text zu übersetzen. Im folgenden Beispiel kann der sekundäre Workflow translate
unverändert verwendet werden und die Ausgabe sollte sich nicht ändern. Sie haben auch die Möglichkeit, andere sekundäre Workflow-Ausführungen in parallelen Zweigen zu starten.
Eine gemeinsame Variable, translated
, wird zum Speichern der Ergebnisse verwendet und mit leeren Strings gefüllt, um die statische Array-Indexierung zu ermöglichen. Wenn keine Sortierung erforderlich ist, können Sie die Ergebnisse mit list.concat
anhängen. Alle Zuweisungen in parallelen Schritten sind atomar.
YAML
JSON
experimental.executions.map
durch eine for:range
-Schleife ersetzen
Anstelle der experimentellen Funktion können Sie eine parallele for:range
-Schleife verwenden, um den Text zu übersetzen. Mit einer for:range
-Schleife können Sie den Anfang und das Ende eines Iterationsbereichs angeben. Die Ausgabe sollte unverändert bleiben.
YAML
JSON
Workflow-Quellcode inline einfügen
Wenn der sekundäre Workflow relativ kurz ist, können Sie ihn zur besseren Lesbarkeit direkt in den Hauptworkflow einfügen. Im folgenden Workflow wurde beispielsweise der Quellcode für den Workflow translate
inline eingefügt.