הפונקציה הניסיונית Workflows , experimental.executions.map, מתחילה ביצוע של תהליך עבודה לכל ארגומנט תואם, וממתינה עד שכל הביצועים יסתיימו. היא מחזירה רשימה שבה כל רכיב הוא תוצאה של ביצוע.
אם אתם משתמשים ב-experimental.executions.map כדי לתמוך בעבודה מקבילה, אתם יכולים להעביר את תהליך העבודה שלכם לשימוש בשלבים מקבילים, ולהפעיל לולאות for רגילות במקביל.
parallel שלב מגדיר חלק בתהליך העבודה שבו שני שלבים או יותר יכולים לפעול בו-זמנית. שלב parallel ממתין עד שכל השלבים שמוגדרים בתוכו מסתיימים או מופרעים על ידי חריגה שלא טופלה, ואז הביצוע נמשך. בדומה ל-Like
experimental.executions.map, סדר הביצוע לא מובטח. לפרטים, אפשר לעיין בדף ההפניה לתחביר של שלבים מקבילים.
שימו לב: כדי להשתמש ב-experimental.executions.map או ב-workflows.executions.run
נדרשת מכסה נוספת של הפעלות בו-זמניות.
עם זאת, כשמשתמשים בשלבים מקבילים עם קריאות למחברים מוטבעים (ראו את הדוגמה למחבר תרגום), לא נדרשת מכסת ביצוע נוספת.
הדוגמאות הבאות נועדו לעזור לכם להחליף את השימוש ב-experimental.executions.map בשלב parallel.
תהליך עבודה של תרגום
בתהליך העבודה הבא, שנקרא translate, נשתמש במחבר Cloud Translation כדי לתרגם טקסט קלט ולהחזיר את התוצאה. שימו לב: צריך להפעיל את Cloud Translation API.
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}" } } ] } }
קלט לדוגמה הקודמת:
{ "text": "Bonjour", "target": "en", "source": "fr" }
הפלט אמור להיראות כך:
{ "data": { "translations": [ { "translatedText": "Hello" } ] } }
תהליך עבודה של תרגום אצווה באמצעות experimental.executions.map
תהליך העבודה הבא מתרגם קבוצה של טקסטים. לכל קלט,
experimental.executions.map מפעיל את תהליך העבודה translate שנוצר
קודם.
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}" } } ] } }
הפלט אמור להיראות כך:
[ { "data": { "translations": [ { "translatedText": "Bonjour le monde!" } ] } }, { "data": { "translations": [ { "translatedText": "Hello world!" } ] } }, { "data": { "translations": [ { "translatedText": "I don't speak Spanish!" } ] } } ]
החלפת experimental.executions.map בלולאה for:in
במקום להשתמש בפונקציה הניסיונית, אפשר להשתמש בלולאה מקבילה for:in כדי לתרגם את הטקסט. בדוגמה הבאה, אפשר להשתמש בתהליך העבודה המשני, translate, כמו שהוא, והפלט לא ישתנה. יש לכם גם אפשרות להפעיל תהליכי עבודה משניים אחרים בענפים מקבילים.
משתנה משותף, translated, משמש לאחסון התוצאות ומאוכלס במחרוזות ריקות כדי לאפשר אינדקס סטטי של מערך. אם לא צריך להזמין, אפשר להשתמש ב-list.concat כדי לצרף את התוצאות. כל המטלות בשלבים מקבילים הן אטומיות.
YAML
JSON
החלפת experimental.executions.map בלולאה for:range
במקום להשתמש בפונקציה הניסיונית, אפשר להשתמש בלולאה מקבילה for:range
כדי לתרגם את הטקסט. באמצעות לולאת for:range, אפשר לציין את ההתחלה והסוף של טווח איטרציה. הפלט לא ישתנה.
YAML
JSON
הטמעה של קוד המקור של תהליך העבודה
אם תהליך העבודה המשני קצר יחסית, כדאי לכלול אותו ישירות בתהליך העבודה הראשי כדי שיהיה קל יותר לקרוא אותו. לדוגמה, בתהליך העבודה הבא, קוד המקור של תהליך העבודה translate הוטמע.