Durable Task SDK for Python
License:
MIT
Build
Validation
PyPI version
이 저장소는 다음을 사용하여 지속적인 오케스트레이션(durable orchestrations)을 구축하기 위한 Python SDK를 포함합니다:
Azure Durable Task Scheduler 및 Azure Durable Functions:
Python 요구 사항 (Python Requirements)
핵심 SDK와 Azure Managed 제공자는 Python 3.11 이상을 필요로 합니다.
Azure Functions Durable 제공자는 Python 3.13 이상을 필요로 합니다.
참고 자료 (References)
선택적 기능 (Optional Features)
Task Hub 쿼리 필터 (Task Hub Query Filters)
OrchestrationQuery.task_hub_names를 설정하여 하나 이상의 작업 허브(task hubs)로 오케스트레이션 쿼리를 필터링할 수 있습니다. 이 필터는 동기식 및 비동기식 핵심 클라이언트와 Azure Managed 클라이언트를 통해 사용할 수 있으며, 필터링 지원 여부는 백엔드에 따라 달라집니다.
from durabletask.client import OrchestrationQuery
query = OrchestrationQuery(task_hub_names=["orders", "billing"])
Set 직렬화 (Set Serialization)
기본 JsonDataConverter는 set과 frozenset을 숫자 순서가 아닌 표준 JSON 표현식에 따라 정렬된 JSON 배열로 직렬화합니다. 예를 들어, {2, 10}은 [10, 2]로 직렬화됩니다. 리스트를 받는 대신 주석이 달린(annotated) set과 frozenset을 재구성하려면 클라이언트와 워커 모두에 동일한 컨버터를 구성해야 합니다:
from durabletask.serialization import JsonDataConverter
converter = JsonDataConverter(enable_generic_sets=True)
이를 Core 또는 Azure Managed 클라이언트 및 워커의 data_converter 매개변수를 사용하여 전달합니다. enable_set_coercion=True는 동일한 옵션의 별칭(alias)입니다. Azure Functions는 이 컨버터 대신 자체 공유 코덱을 사용합니다.
[!경고]
기록된 JSON 배열의 순서와 중복을 보존하기 위해 set 재구성은 기본적으로 비활성화되어 있습니다. 기존 오케스트레이션에 대해 이를 활성화하면 리플레이 동작이 변경될 수 있습니다. 재구성된 set을 반복하는 것은 리플레이 안전(replay-safe)하지 않으므로, 지속적인 작업을 예약하기 위해 순서를 사용하기 전에 값을 명시적으로 정렬해야 합니다.
엔티티 ID(Entity IDs)
EntityInstanceId 값은 불변(immutable)하고 해시 가능하며(hashable), 딕셔너리 키 또는 set 요소로 사용할 수 있습니다. 엔티티 이름이나 키를 변경하려면 새 ID를 구성해야 합니다. 속성 할당 및 삭제는 AttributeError를 발생시킵니다.
대용량 페이로드 외부화(Large Payload Externalization)
오케스트레이션 페이로드 크기가 너무 클 경우 자동으로 Azure Blob Storage로 오프로드하려면 azure-blob-payloads 추가 기능을 설치하십시오:
pip install durabletask[azure-blob-payloads]
사용 세부 정보는 기능 문서와 예제를 참조하십시오.
실패 세부 정보 속성(Failure Details Properties)
활동(activity), 엔티티(entity), 오케스트레이션(orchestration) 실패에 휴대 가능한 진단 속성(portable diagnostic properties)을 첨부하려면 ExceptionPropertiesProvider를 구성하십시오:
from durabletask import ExceptionPropertiesProvider
from durabletask.worker import TaskHubGrpcWorker
...
속성은 None, 부울(booleans), 숫자(numbers), 문자열(strings), 중첩 매핑(nested mappings), 및 리스트를 지원합니다. 이들은 TaskFailedError.details, 오케스트레이션 상태(orchestration state), 그리고 히스토리에서 FailureDetails.properties로 사용할 수 있습니다.
[!NOTE]
Python은 의도적으로 .NET의 dt: 및 dto: 속성 문자열을 일반 문자열로 처리하며, 이는 Java SDK와 일치합니다. 결과적으로, datetime 값은 Python/.NET 실패 상세 속성 왕복(round trips)을 거치면서 타입을 유지하지 못합니다. 이는 .NET SDK의 동등성 격차(parity gap)입니다.
상표권 (Trademarks)
본 프로젝트에는 프로젝트, 제품 또는 서비스에 대한 상표나 로고가 포함될 수 있습니다. Microsoft 상표나 로고를 승인받아 사용하는 것은 Microsoft의 상표 및 브랜드 가이드라인을 준수해야 하며 이를 따라야 합니다. 본 프로젝트의 수정된 버전에서 Microsoft 상표나 로고를 사용하는 경우, 혼동을 야기하거나 Microsoft의 후원처럼 보이게 해서는 안 됩니다. 제3자의 상표나 로고 사용은 해당 제3자의 정책을 따릅니다.