2013-01-10 8 views
2

파이썬으로 웹 스크래퍼 응용 프로그램을 만들었습니다. 그것은 세 가지 주요 부분으로 구성닫을 때 프로세스가 종료되지 않습니다.

  1. 그래픽 사용자 인터페이스 (Tkinter를 기반으로)
  2. 백엔드 코드 (다양한 스레드 프로세스) 클라이언트 (프론트와 백 엔드 사이의 제어 인터페이스).

내가 가진 문제는 사용자가 인터페이스를 끝내지 않고 프로그램을 종료하기 위해 X를 눌렀을 때 root.destroy()가 호출되지 않고 응용 프로그램이 영원히 실행되는 것처럼 보입니다. 사라지다. 이것은 결국 많은 양의 시스템 리소스를 소비하게됩니다.

많은 스레드를 Daemon에 설정해 보았습니다. 프로그램 종료 후 CPU를 계속 먹게하는 다른 이유가 있습니까?

+1

프로그램이 멀티 스레드입니다. 한 스레드가 끝날 때 (GUI) 다른 스레드가 작동 할 수 있습니까? – mgilson

답변

2

당신은 daemon모든 스레드를 설정하지 않습니다. 클라이언트 스레드와 백엔드 스레드를 데몬으로 설정하려고합니다. 이렇게하면 GUI 스레드가 종료 될 때 daemon의 스레드가 True으로 끝납니다. documentation에서

:

스레드는 "데몬 스레드"으로 플래그 할 수 있습니다. 이 플래그의 중요성은 데몬 스레드 만 남아있을 때 전체 Python 프로그램이 종료된다는 것입니다.

+0

그래서 GUI 스레드는 ** 데몬으로 설정되어 있지 않아야합니까? 하위 스레드는 어떻게됩니까? 백엔드 스레드는 많은 하위 스레드를 생성합니다. 부모 스레드를 데몬으로 설정할 수 있습니까? 아니면 이들 모두를 데몬으로 설정해야합니까? –

+0

@AdrianLarson 네, 그게 제가 말하는 것입니다. 쉬운 방법은 모든 스레드를 GUI를 제외한 데몬 스레드로 설정하는 것입니다. 여기에는 백엔드 스레드가 생성 한 모든 하위 스레드가 포함됩니다. –

+0

그래, 그저 다 내려 줘야했다. 수입 스레드 스레딩에서 **이 패키지에 꽤 몇 가지 모듈은, 그래서 고맙게도 나는 을 사용하고있었습니다 **로 교체 할 정도로 쉬웠다 : ** ..package.sub 수입 DaemonThread에서 같은 스레드 ** 모든 생성 된 스레드를 데몬스트롬하게 만듭니다. –

관련 문제