피드로 돌아가기
Async Python Is Secretly Deterministic
Hacker NewsHacker News
Backend

Async Python의 FIFO 특성을 이용한 결정론적 워크플로우 설계

Async Python Is Secretly Deterministic

2026년 4월 3일4advanced

Context

Durable Workflow 구현을 위해 리플레이 기반의 복구 시스템 필요. asyncio.gather를 통한 동시성 실행 시 단계별 실행 순서가 비결정론적으로 변하는 문제 발생. 복구 시 일관된 단계 순서 보장을 위한 결정론적 실행 모델 요구.

Technical Solution

  • Python Event Loop의 싱글 스레드 스케줄러 동작 원리 분석
  • asyncio.gather에 전달된 코루틴이 FIFO 순서로 Task 큐에 등록되는 특성 활용
  • 첫 await 호출 이전까지는 제어권 전환 없이 순차적으로 코드가 실행되는 점에 주목
  • @Step() 데코레이터 내에서 첫 await 발생 전 Workflow Context의 Step ID를 미리 할당하는 로직 설계
  • Task 생성 순서와 Step ID 부여 순서를 일치시켜 동시 실행 환경에서도 결정론적 순서 보장
  • 명시적인 await를 통한 제어권 양도 시점에만 태스크가 인터리빙되는 구조 활용

Key Takeaway

싱글 스레드 기반의 이벤트 루프 모델은 태스크 진입 시점의 예측 가능성을 제공함. 동시성 라이브러리의 내부 스케줄링 메커니즘을 이해하면 분산 시스템의 결정론적 상태 관리를 효율적으로 구현 가능.


비결정론적 요소가 포함된 Async 워크플로우 설계 시, 첫 await 호출 전 단계에서 식별자나 순서 값을 먼저 할당하여 실행 순서를 고정할 것

원문 읽기