Fungsi eksperimental
Workflows,
experimental.executions.map
, memulai eksekusi alur kerja untuk setiap
argumen yang sesuai, dan menunggu semua eksekusi selesai, yang menampilkan
daftar dengan setiap elemen adalah hasil dari eksekusi.
Jika menggunakan experimental.executions.map
untuk mendukung pekerjaan paralel, Anda dapat
memigrasikan alur kerja untuk menggunakan langkah paralel, dengan menjalankan
loop for
biasa secara paralel.
Langkah parallel
menentukan bagian alur kerja Anda tempat dua langkah atau lebih dapat
dieksekusi secara serentak. Langkah parallel
menunggu hingga semua langkah yang ditentukan di dalamnya telah selesai atau diganggu oleh pengecualian yang tidak tertangani; eksekusi akan dilanjutkan. Seperti
experimental.executions.map
, urutan eksekusi tidak dijamin. Untuk mengetahui detailnya, lihat halaman referensi sintaksis untuk langkah paralel.
Perhatikan bahwa penggunaan experimental.executions.map
atau workflows.executions.run
memerlukan kuota eksekusi serentak tambahan.
Namun, saat menggunakan langkah paralel dengan panggilan ke konektor
yang disisipkan (lihat contoh konektor terjemahan), kuota eksekusi tambahan tidak diperlukan.
Contoh berikut dimaksudkan untuk membantu Anda saat mengganti penggunaan experimental.executions.map
dengan langkah parallel
.
Alur kerja terjemahan
Dengan mempertimbangkan bahasa sumber dan target, alur kerja berikut, bernama translate
, menggunakan konektor Cloud Translation untuk menerjemahkan beberapa teks input dan menampilkan hasilnya. Perhatikan bahwa Cloud Translation API harus diaktifkan.
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}" } } ] } }
Input untuk contoh sebelumnya:
{ "text": "Bonjour", "target": "en", "source": "fr" }
Output akan terlihat seperti berikut:
{ "data": { "translations": [ { "translatedText": "Hello" } ] } }
Alur kerja terjemahan batch menggunakan experimental.executions.map
Alur kerja berikut menerjemahkan sekumpulan teks. Untuk setiap input,
experimental.executions.map
menjalankan alur kerja translate
yang dibuat
sebelumnya.
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}" } } ] } }
Output akan terlihat seperti berikut:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!" } ] } } ]
Ganti experimental.executions.map
dengan loop for:in
Daripada menggunakan fungsi eksperimental, Anda dapat menggunakan loop for:in
paralel
untuk menerjemahkan teks. Dalam contoh berikut, alur kerja sekunder,
translate
, dapat digunakan sebagaimana adanya dan output tidak boleh berubah. Anda juga
memiliki opsi untuk memulai eksekusi alur kerja sekunder lainnya di
cabang paralel.
Variabel bersama,
translated
, digunakan untuk menyimpan hasil dan diisi dengan string kosong
untuk mengaktifkan pengindeksan array statis. Jika pengurutan tidak diperlukan, Anda dapat menggunakan
list.concat
untuk menambahkan
hasil. Semua penetapan dalam langkah paralel bersifat atomik.
YAML
JSON
Ganti experimental.executions.map
dengan loop for:range
Alih-alih menggunakan fungsi eksperimental, Anda dapat menggunakan loop for:range
paralel untuk menerjemahkan teks. Dengan menggunakan loop for:range
, Anda dapat menentukan
awal dan akhir rentang iterasi. Output tidak boleh berubah.
YAML
JSON
Membuat kode sumber alur kerja menjadi inline
Jika alur kerja sekunder relatif singkat, sebaiknya Anda menyertakannya
langsung dalam alur kerja utama agar lebih mudah dibaca. Misalnya, dalam
alur kerja berikut, kode sumber untuk alur kerja translate
telah
disisipkan.