Workflows의 실험용 함수인 experimental.executions.map
은 해당하는 각 인수에 대해 워크플로 실행을 시작하고, 모든 실행이 완료되기를 기다리고, 각 요소가 실행 결과로 구성된 목록을 반환합니다.
experimental.executions.map
을 사용하여 병렬 작업을 지원하는 경우 병렬 단계를 대신 사용하도록 워크플로를 마이그레이션하여 일반적인 for
루프를 병렬로 실행할 수 있습니다.
parallel
단계는 두 개 이상의 단계가 동시에 실행될 수 있는 워크플로 부분을 정의합니다. parallel
단계는 여기에 정의된 모든 단계가 완료되거나 미처리 예외로 인해 중단될 때까지 기다린 후 실행을 계속합니다. 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
워크플로의 소스 코드가 인라인 처리되었습니다.