2012-03-12 1 views
4

플라스크 응용 프로그램 내에서 장기 실행 스레드를 구현하고 있습니다. 디버그 모드에서 reloader가 활성화 된 상태에서 long-running 스레드는 다시로드 할 때 죽지 않습니다.플라스크 자동 다시로드 및 장기 실행 스레드

대신 스레드를 만들고 시작하는 코드가 다시로드 된 후에 실행되므로 각주기마다 추가 스레드가 생성됩니다.

리로더를 사용 중지하는 것 외에는 어떻게 방지 할 수 있습니까?

mod_wsgi에서 자동 다시로드 기능을 사용하여 실행하는 경우에도 마찬가지입니까?

업데이트 : 장기 실행 스레드는 재로드시 Werkzeug에 의해 실제로 삭제되었습니다. Werkzeug의 리로더가 초기화 코드를 실행하는 추가 스레드를 사용하기 때문에 여분의 복사본이 있습니다. 이 프로세스가 강제 어쨌든 죽을 것 오초 내에 완료하지 않는 경우 기본적으로 장기 실행 요청의 경우

http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

:

답변

3

mod_wsgi에 다시로드에 설명되어있다. 이는 요청이 완료되지 않기 때문에 프로세스가 잠기는 문제를 피하기위한 것입니다.

+0

감사합니다. 링크 된 문서에서 볼 수 있듯이, 데몬 모드에서 전체 프로세스가 다시 시작되어 스레드가 함께 죽을 것입니다. –

+0

예, 죄송합니다. 5 초 제한 시간이 데몬 모드에만 해당된다는 것을 분명히 잊어 버렸습니다. 임베디드 모드 다시로드는 문서화 된대로 다릅니다. –

+0

적어도 내 앱에서는 5 초 후에도 기존 스레드가 종료되지 않습니다. 어쩌면 몇 년 동안 뭔가가 바뀌었을 것입니다. –