오래 걸리는 셀을 멈추고 싶어도 앞에서 만든 변수까지 잃고 싶지는 않을 수 있다. 반대로 끝나지 않는 계산 때문에 화면이 계속 바쁘게 남는 것도 곤란하다. 나는 현재 셀에 중지를 요청하는 일과 커널 프로세스를 닫는 일을 구분하고 응답하지 않는 경우에만 다음 종료 경계로 넘어가도록 했다.
interrupt는 먼저 실행 중지의 의도를 남긴다
NotebookService.interrupt는 cancelled를 표시하고 현재 커널이 있으면 호스트 중지와 interrupt 메시지를 보낸다. Python 제어기는 KernelManager.interrupt_kernel로 전달한다. 셀에 협력적으로 중단될 기회를 주며 이 함수 자체가 새 커널을 만들지는 않는다.
일반 Python 계산이 중지에 반응하면 같은 커널을 이어 쓸 수 있어 앞선 변수가 남을 수 있다. 이것을 모든 라이브러리와 네이티브 호출이 반드시 반응한다는 보장으로 쓰지 않는다. 중지 요청을 보냈다는 사실과 셀이 실제로 종료됐다는 사실은 다르다. 실행 상태가 끝났는지도 확인해야 한다.
같은 실행이 남았을 때만 종료로 넘어간다
현재 셀이 실행 중이었다면3초 뒤 같은 커널과 같은 execution ID가 아직 실행 중인지 확인한다. 둘 다 같을 때 shutdown을 호출한다. 오래된 중지 타이머가 이후 새 커널이나 다른 셀을 종료하지 않게 비교 대상을 남긴 것이다. 시간을 재는 것만큼 누구의 시간인지 확인하는 일이 중요했다.
3초는 모든 계산의 적절한 중단 시간이라는 과학적 기준이 아니다. 현재 제품에서 응답 없는 실행이 화면을 계속 점유하지 않도록 정한 경계다. 너무 빨리 끝내면 변수 보존 기회가 줄고 너무 늦으면 작업자는 상태를 이해하기 어렵다. 이 선택의 목적과 실제 조건을 함께 설명한다.
shutdown은 연결과 대기 중인 셀도 정리한다
shutdown은 커널을 현재 서비스에서 분리하고 ready와 실행 대기를 거절한다. 열린 소켓과 서버를 닫고 자식 제어기에 종료 명령을 보낸다. 종료가 늦으면4초 타이머로 child.kill을 요청한다. 사용자 취소 경로에서는 실행의 completion까지 기다려 화면의 busy 정리와 맞춘다.
프로세스가 닫히면 Python 메모리 변수는 보존되지 않는다. 저장된 노트북 문서와 출력, 업무 원장은 다른 자료로 남을 수 있다. 나는 커널을 종료했다고 파일 자료도 삭제하는 식으로 묶지 않는다. 어느 상태가 사라지고 무엇을 다시 읽을 수 있는지 알아야 다음 실행에서 무엇을 준비할지 결정할 수 있다.
외부에 전달된 변경은 중지로 되돌아오지 않는다
호스트의 중지는 새 브라우저 요청을 막는 실행 조건과도 연결된다. 하지만 이미 서비스에 전달된 입력과 저장, 발행을 취소했다는 뜻은 아니다. 커널이 꺼져도 그 결과는 서버에 남을 수 있다. 상태가 취소로 바뀌었다는 이유로 같은 변경을 새로 실행하면 중복될 수 있다.
이때는 원래 실행 기록과 실제 서비스 결과를 먼저 읽어야 한다. 변수 보존과 프로세스 종료만으로 업무 재실행의 안전성까지 판단하지 않는다. 나는 중지 버튼을 과거 행동을 지우는 되돌리기 기능으로 소개하지 않는다. 실행의 제어와 업무 결과의 확인에는 다른 계약이 필요하다.
코드의 의도와 실제 시험을 같은 말로 쓰지 않는다
이 글은 interrupt·shutdown과 Python 제어기의 메시지 처리를 읽어 상태와 타이머 조건을 정리했다. 모든 네이티브 라이브러리에 실제 중지를 보낸 시험은 하지 않았다. 시작 준비 중 중지의 기존 단위 시험과 커널 execute의 생존 시험도 각자 다른 상황을 확인한다.
파일 원장 모듈의 reopen 시험은 프로세스 중지 시험이 아니다. 같은 “다시 시작”이라는 표현을 쓰더라도 확인한 층이 다르다. 나는 협력적 중지로 변수가 남을 수 있다는 설계와 강제 종료 뒤 메모리가 사라진다는 수명을 설명하되 실제 검수하지 않은 실행 환경의 성공은 덧붙이지 않는다.
사용자에게 잃는 것과 남는 것을 알려 준다
같은 중지 표시 아래에서 어떤 때는 변수로 이어지고 어떤 때는 다시 준비해야 한다면 혼란스럽다. 나는 현재 셀의 중지 요청, 실행 종료, 커널 종료를 구분해 설명해야 한다고 생각한다. 중지된 상태를 읽을 수 있어야 무작정 실행 셀을 다시 누르는 일을 줄일 수 있다.
직원이 쓰는 업무 프로그램도 처리 취소와 프로그램 종료, 저장 자료 삭제를 같은 말로 부르면 오해가 생긴다. 버튼을 늘리는 것이 목적이 아니라 결과의 수명을 분명히 하는 것이 목적이다. 중지 흐름을 깊게 보는 일은 계산 속도보다 작업자가 다음 선택을 이해하도록 만드는 작업이었다.