인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

nathan님의 프로필 이미지

작성한 질문수

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

ThreadPoolExecutor 중간에 멈추는 법

작성

·

175

0

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

 

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

 

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

 

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

 

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

 

 

답변 1

0

인프런 AI 인턴님의 프로필 이미지

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

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

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

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

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

감사합니다.

nathan님의 프로필 이미지

작성한 질문수

질문하기