를 중지하는 방법이 하위 프로세스는 실행 단위 테스트하십니까?를 종료하고 죽이지

StackOverflow https://stackoverflow.com/questions/3302910

문제

나는 Tkinter GUI 를 실행하는 두 개의 스레드,메인 보행을 위한 GUI 와 worker thread.Worker 쓰레드를 생성 하위 프로세스를 사용하여 다음과 같은 코드:

myProcess = subprocess.Popen(['python', '-u', 'runTests.py'],  
                         stdout=subprocess.PIPE, 
                         stderr=subprocess.STDOUT)

파일 runTests.py 는 일부를 설치한 후 실행하 단위 테스트를 사용하여 파일을 다음과 같은 명령을 실행합니다:

execfile('myUnitTests.py')

파일 myUnitTests.py 여러한 단위 테스트 몇몇을 통해 다섯 분을 실행합니다.에서 GUI 나는 버튼을 클릭하여 실행을 중지 테스트합니다.이 차례로 만드는 worker 쓰레드 신호를 보낼지 하위 프로세스:

myProcess.terminate()

종료 명령을 멈추지 않는 프로세스,바로 그것을 때까지 기다립니다 현재 단위 테스트 실행이 완료되면 다음을 종료 프로세스?사 os.kill 그러나 나는 같은 결과를 얻으로 함 terminate().

어떤 아이디어는 어떻게 나의 프로그램을 더욱 반응 하도록을 죽이는 하위 프로세스하십니까?

도움이 되었습니까?

해결책

Python 문서[ http://docs.python.org/library/signal.html ]말한다:

  • 지만 Python 신호 처리기라고 비동기적으로 멀리로는 파이썬은 사용자에 관한 한,그들은 단지 사이에 발생하는"원자"지침의 파이썬.이것이 의미하는 신호의 도착하는 동안 긴 계산 순전히 구현 C(과 같은 일치하는 정규 표현식에서는 대체 텍스트)이 지연 될 수 있습니다 임의의 시간이 있습니다.

그래서 만약 당신의 다섯 분 단위 테스트는"긴 계산 순전히 구현 C", 유 테스트 도구를 설치에 대한 처리기 SIGTERM, 는 당신의 문제입니다.그렇다면,시험 myProcess.killmyProcess.terminate (or,if you haven't got2.6, myProcess.send_signal(9)). SIGKILL 는지지 않는 사용자 공간이 있어야합니다.

경고:모든 청소 작업에서 실행되도록 디자인된 방법의 단위 테스트 framework 이 실행되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top