25c523b72cd5acdc9bbfaa0d49c8ae391624ed84
uvicorn 0.24 BaseReload.restart() 는 윈도우에서만 옛 워커를 os.kill(worker_pid, CTRL_C_EVENT) 로 내리려 함. CTRL_C_EVENT 는 프로세스 그룹을 지정해 보낼 수 없어(MSDN: 그룹 id 가 0 이 아니면 호출은 성공하지만 신호는 전달되지 않음) 워커에 아무것도 안 감. 바로 다음 join() 이 영원히 안 풀려 옛 워커가 살아서 옛 코드로 계속 응답하고, 새 워커는 태어나지 않으며, 그 뒤 파일 변경은 감지조차 안 됨. 실측(그 자리를 흉내 낸 부모·자식 한 쌍): CTRL_C_EVENT → 8초 안에 안 풀림 (DETACHED · CREATE_NO_WINDOW · +NEWGROUP 모두) terminate() → 0.00초 CTRL_BREAK → 0.00초 (자식을 그룹 우두머리로 띄웠을 때) 고침은 uvicorn 자신의 리눅스 경로를 그대로 씀. DEBUG + win32 개발 기동에서만 갈아 끼우고, uvicorn 이 위쪽에서 고치면 _patch_windows_reload 를 지우면 됨. ⚠ 앞선 두 커밋(빌드 고리·종료 시한)은 이번 멈춤의 원인이 아니었음. 빌드 고리는 실제 문제였고, 종료 시한은 다른 경우를 막는 값이 있어 남김. [boot] 표식이 이 진단을 가능하게 했으므로 함께 남김. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GrXDD23Dvt2sR7q3X6oekp
Aislo
Aislo 웹앱
Languages
Lasso
99.4%
Python
0.3%
TypeScript
0.3%