본문 바로가기
파이썬

파이썬 별도의 스레드에서 플라스크 애플리케이션 시작

by º기록 2020. 11. 21.
반응형

저는 현재 실시간 통계를보고 싶은 Python 애플리케이션을 개발 중입니다. 사용하기 쉽고 이해하기 쉽도록 Flask 를 사용하고 싶었습니다.

문제는 내 Flask 서버가 Python 애플리케이션의 맨 처음에 시작되고 맨 끝에 중지되어야한다는 것입니다. 다음과 같이 표시되어야합니다.

def main():
    """ My main application """
    from watcher.flask import app
    # watcher.flask define an app as in the Quickstart flask documentation.
    # See: http://flask.pocoo.org/docs/0.10/quickstart/#quickstart

    app.run() # Starting the flask application

    do_my_stuff()

    app.stop() # Undefined, for the idea 

내 애플리케이션 컨텍스트 (통계 용)가 필요하기 때문에 multiprocessing.Process 를 사용할 수 없습니다. 그런 다음 threading.Thread 를 사용하려고했지만 Werkzeug가 좋아하지 않는 것 같습니다.

 * Running on http://0.0.0.0:10079/
Exception in thread Flask Server:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File ".../develop-eggs/watcher.flask/src/watcher/flask/__init__.py", line 14, in _run
    app.run(host=HOSTNAME, port=PORT, debug=DEBUG)
  File ".../eggs/Flask-0.10.1-py2.7.egg/flask/app.py", line 772, in run
    run_simple(host, port, self, **options)
  File ".../eggs/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 609, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval)
  File ".../eggs/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 524, in run_with_reloader
    signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
ValueError: signal only works in main thread

메인 스레드에서 Flask를 실행하지 않고 어떻게 할 수 있습니까?

 

해결 방법

 

디버그 모드에서 Flask 를 실행하여 리 로더 를 활성화합니다 (코드가 변경 될 때 Flask 서버를 다시로드 함).

Flask는 별도의 스레드에서 잘 실행될 수 있지만 리 로더는 기본 스레드에서 실행될 것으로 예상합니다.

문제를 해결하려면 디버그 ( app.debug = False )를 비활성화하거나 리 로더를 비활성화 ( app.use_reloader = False )해야합니다.

또한 app.run : app.run (debug = True, use_reloader = False) 에 인수로 전달할 수도 있습니다.

 

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

 

 

반응형

댓글