인프런 커뮤니티 질문&답변

nathan님의 프로필 이미지
nathan

작성한 질문수

파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)

ThreadPoolExecutor 중간에 멈추는 법

작성

·

113

0

선생님 안녕하세요 좋은 강의 감사합니다.

 

수업자료 3-3 io multi-threading.py 관련해서 질문 있습니다.

 

만약 fetcher 함수가 끝이 있는 함수가 아니라 while 문으로 계속 도는 (다른) 함수라고 가정하고, ThreadPoolExecutor 를 통해 2개 이상의 스레드에서 함수들을 돌린다고 했을 때

 

파이썬 스크립트 파일을 실행시키면 ctrl+c 를 눌러도 종료가 안되는데, 이건 왜 이러는 것이죠?

 

그리고 ctrl+c 를 통해 종료를 하게 하려면 어떻게 코드를 수정해야 하는지도 설명 부탁드립니다.

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

nathan님, 질문 주셔서 감사합니다. 특정 강의 관련된 구체적인 코드 수정 방법에 대해서는 제공된 정보에 없기 때문에 직접적인 답변을 드리기 어렵습니다. 하지만, 일반적으로 Python의 ThreadPoolExecutor가 사용되는 환경에서 Ctrl+C (SIGINT)로 프로그램 종료가 어려운 경우는 Python에서 SIGINT 신호를 메인 스레드에만 전달하기 때문에 발생할 수 있습니다. 이럴 때 멀티 스레딩 환경에서 각 스레드에 종료 신호를 전달하여 종료할 수 있도록 구현을 변경해야 합니다.

  • 종료 신호를 처리하기 위해 concurrent.futures 모듈의 Future 객체를 사용하여 작업 완료를 감지하고,
  • threading 모듈을 사용하여 종료 신호를 받을 경우 스레드를 종료시킬 수 있는 메커니즘을 구현할 수 있습니다.
  • 또는 while 문 내에 일정 조건에 의해 loop를 종료할 수 있는 로직을 추가하여, 외부로부터의 종료 요청을 프로그램 내부에서 처리할 수 있도록 해야 합니다.

각 스레드의 실행 함수 내 종료 조건을 검증하거나, 예외 처리를 통해 외부 인터럽트에 대응하는 코드를 추가하는 것이 일반적인 해결 방법 중 하나입니다.

구체적인 코드 수정이 필요하시다면, Python의 공식 문서나 해당 강의의 Q&A 섹션을 참고하시거나, 스레드 안전한 종료 방법에 대한 추가적인 학습을 권장드립니다.

감사합니다.

nathan님의 프로필 이미지
nathan

작성한 질문수

질문하기