クイズ: 中断点と人の介入
한국어 원문으로 표시합니다.
compile(interrupt_before=["settle"]) 만 주고 체크포인터를 붙이지 않았다. 실제로 무슨 일이 생기는가?
- 컴파일할 때 예외가 나서 바로 알아챌 수 있다
- 중단점이 무시되고 settle 까지 그대로 실행된다
- 오류 없이 settle 앞에서 멈추고 절반짜리 상태를 돌려주며 이어서 돌릴 수 없다
- 첫 invoke 는 성공하고 두 번째 invoke 부터 예외가 난다
interrupt_before 로 멈춘 그래프를 이어서 돌릴 때 입력 자리에 넣어야 하는 것은?
None— 새 입력은 없고 저장된 데서 이어서 하라는 뜻이다- 처음에 넣었던 입력을 그대로 다시
- 멈춘 노드의 이름을 담은 딕셔너리
get_state(config).values를 통째로
노드 안에서 interrupt() 로 멈춘 뒤 Command(resume=...) 로 재개했다. 그 노드의 실행에 대해 옳은 것은?
- 멈춘 지점 바로 다음 줄부터 이어서 실행된다
- 노드가 처음부터 다시 돌아서
interrupt()앞의 코드가 두 번 실행된다 - 노드를 건너뛰고 다음 노드로 넘어간다
- 노드가 새 프로세스에서 돌아 이전 지역 변수가 모두 사라진다
app.update_state(config, {"trace": ["human"]}) 를 했더니 trace 가 ["human"] 으로 바뀌지 않고 뒤에 한 칸 늘었다. 이유는?
- update_state 는 항상 리스트를 이어 붙이도록 만들어져 있다
- 체크포인터가 옛 값을 복원해 덮어쓰기를 막았다
- update_state 가 넣는 값도 그 열쇠의 리듀서를 거치는데 trace 에는 이어 붙이는 리듀서가 붙어 있다
- thread_id 가 달라 두 상태가 합쳐졌다
승인 경로를 만들 때 "거절" 을 결과로 두지 않으면 생기는 일은?
- 거절된 건이 자동으로 승인 처리된다
- 승인자가 아무 동작도 하지 않는 것으로 거절하게 되어 그 건이 대기열에 영원히 남는다
- 체크포인트가 지워지지 않아 메모리가 계속 늘어난다
- 그래프가 재귀 한도에 닿아 예외를 던진다
interrupt_before 와 노드 안의 interrupt() 를 고를 때 사람에게 보여 줄 값을 직접 고르고 싶다면?
- 둘 다 상태 전체만 보여 줄 수 있어 차이가 없다
- interrupt_before 에 보여 줄 열쇠 목록을 함께 넘긴다
- 노드 안의 interrupt(값) 을 쓴다 — 멈출 때 넘긴 값이 그대로 전달된다
- compile 의 output 스키마로 좁혀서 보여 준다