본문 바로가기
파이썬

파이썬 Flask 개발 서버를 실행하면 왜 자체적으로 두 번 실행 되나요?

by º기록 2020. 12. 9.
반응형


#!/usr/bin/env python
from datetime import datetime
from app import app
import config

if __name__ == '__main__':
    print '################### Restarting @', datetime.utcnow(), '###################'
    app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')

서버를 시작하거나 파일이 업데이트되어 자동으로 다시 시작될 때 항상 인쇄 줄이 두 번 표시됩니다.

################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################

실제로 문제가되지는 않지만 (나머지는 예상대로 작동 함) 왜 이렇게 작동하는지 궁금합니다. 어떤 아이디어?

 

해결 방법

 

Werkzeug 리 로더는 코드가 변경 될 때마다 해당 프로세스를 다시 시작할 수 있도록 자식 프로세스를 생성합니다. Werkzeug는 app.run () 을 호출 할 때 개발 서버와 함께 Flask를 제공하는 라이브러리입니다.


use_reloader False 로 설정하면 동작이 사라지는 것을 볼 수 있지만 다시로드 기능도 손실됩니다.

app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)

flask run 명령을 사용할 때도 리 로더를 비활성화 할 수 있습니다.

FLASK_DEBUG=1 flask run --no-reload

다시로드하는 하위 프로세스에있는시기를 감지하려면 WERKZEUG_RUN_MAIN 환경 변수를 찾을 수 있습니다.

import os
if os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
    print '################### Restarting @ {} ###################'.format(
        datetime.utcnow())


@app.before_first_request
def before_first_request():
    print '########### Restarted, first request @ {} ############'.format(
        datetime.utcnow())

요청을 처리하기 위해 분기 또는 새 하위 프로세스를 사용하는 풀 스케일 WSGI 서버에서이를 실행하는 경우 before_first_request 핸들러가 각각의 새 하위 프로세스에 대해 호출 될 수 있습니다 는 점을 고려하십시오. .

 

참조 페이지 https://stackoverflow.com/questions/25504149

 

 

반응형

댓글