2010-04-15 3 views
1

Bottle 웹 프레임 워크를 작은 응용 프로그램 (첫 번째 대상은 Windows OS 임)에 포함시키고 싶습니다. 이 응용 프로그램은 서브 프로세스 모듈 덕분에 병 웹 서버를 시작합니다. 하위 프로세스에서 시작할 때 Bottle 웹 서버를 중지하는 방법

import subprocess 
p = subprocess.Popen('python websrv.py') 

병 응용 프로그램

그것은 윈도우 콘솔에 기본 웹 서버를 시작

@route("/") 
def index(): 
    return template('index') 

run(reloader=True) 

매우 간단합니다.

병 웹 서버를 닫으려면 Ctrl-C를 눌러야한다는 사실 외에도 모두 괜찮은 것 같습니다. 마스터 응용 프로그램이 종료 될 때 웹 서버를 종료하고 싶습니다. 나는 그것을 할 수있는 방법을 찾을 수 없다. (불행하게도 p.terminate()가 작동하지 않는다.)

어떤 생각?

미리 감사드립니다.

+0

아직도 관심이 있으시면 도움이 될 것입니다. http://stackoverflow.com/questions/11282218/bottle-web-framework-how-to-stop/16056443#16056443 – mike

답변

3

은 종료 두 가지 방법 다시로드 서버가 있습니다 자식 프로세스.

2) 종료와 동일한 os.kill(p.pid, signal.SIGINT)으로 p를 종료합니다.

+0

2) Windows에서 작동합니까? 답변 해주셔서 감사합니다. 나는 그것을 시도 할 것이다. – luc

+0

signal.SIGINT가 정의되면, 이것은 윈도우에서도 작동해야합니다. 나는 그것을 테스트하지 않았다. – user242486

1

보틀이 다시로드 모드에있는 경우 종료 프로세스가 작동하지 않는 것으로 보입니다. 이 경우 하위 프로세스가 시작됩니다.

reload를 False로 설정하면 종료가 정상적으로 처리 된 것처럼 보입니다. 의 자동 종료를 트리거 (os.kill(p.pid) 또는 p.terminate() 사용) 한 후 'websrv.py'(os.utime('websrv.py'))의 수정 시간을 변경 당신은 페이지를 종료

1) :

1

0.8.1부터는 리로딩 서버가 분리되어있어 고아 프로세스를 정리할 수 있습니다.

  • 히트 Ctrl-C 또는 부모 프로세스에 SIGINT을 보내 : 이제 서버를 종료하는 방법에는 여러 가지가 있습니다. (권장)
  • 상위 프로세스를 강제 종료하십시오. 아이는 2 초 안에 정상적으로 죽습니다.
  • 자식 프로세스 또는 3 이외의 상태 코드로 sys.exit()을 종료하십시오. 부모는 즉시 죽습니다.
0

bottle이 요청을 처리 할 때 병이 요청을 하위 프로세스에서 실행하는 것 같습니다.

나는 결국 해결책이해야 할 알게되었다 :

sys.stderr.close() 

을 (병 서버까지 전달하고 도끼있어) 요청 내부.

아마도 당신의 과정에서 그렇게하고 병이 메시지를 얻는 지보십시오.