2014-03-30 1 views
0

이것이 최상의 방법에 관한 질문입니다.플라스크 응용 프로그램을 웹 이외의 프로그램에 대한 인터페이스로 사용

저는 웹 개발, 웹 프레임 워크 등에 조금 익숙합니다. 저는 플라스크로 웹 사이트를 만들 계획입니다. 근본적으로 커맨드 라인 프로그램이 될 수있는 인터페이스 인 앱을 만드는 것에 대해 궁금합니다. 예를 들어, 단어를 허용하고 그 단어의 모든 유효한 아나그램을 인쇄하는 Python 명령 행 프로그램이 있다고 가정 해보십시오. 이 논리가 내 Flask 앱에 어디에/어떻게 들어 맞습니까? 이게 뭔가?

from anagram import compute_all_anagrams 

@app.route("/result?word=<word>") # I'm not sure if this is correct usage of route 
def result_page(word): 
    result = compute_all_anagrams(word) # returns a list of anagrams 
    render_template("result.html", result=result) 

여기서 result.html은 결과 목록을 표시하는 템플릿입니까?

당연히 여기에 내 아나그램 프로그램이 없을 것입니다. 인쇄 아무거나 오히려 그것을 문자열 배열로 반환합니다.

또한 compute_all_anagrams가 10 초 정도 걸리는 경우 어떻게해야합니까? 어떻게 변화시킬 수 있겠습니까?

고마워요.

답변

1

네, 그 아이디어가 있습니다.

계산에 시간이 오래 걸리면 아약스 또는 유사한 클라이언트 측 "렌더링 중 ..."메시지를 사용할 수 있습니다. 그러면 배경 작업을 생성 할 수 있습니다. 가장 쉬운 방법은 실제로 외부 프로세스를 모두 실행하는 것입니다. 그리고 나서 "아직 완료 되었습니까?" 요청이 들어오고, 아직 실행 중인지 확인하고, 그렇지 않은 경우 파일에서 결과를 리턴하고, 여전히 실행중인 경우 클라이언트에게 알려줍니다.

기본적으로 플라스크에 내장 된 개발 웹 서버는 포 그라운드에서 오랜 시간 일을 할 때 차단됩니다. 이는 다중 사용자에게는 좋지 않지만 단일 사용자에게는 적합합니다. "몇 가지 작업을 내 휴대 전화". 그래서 플라스크 또는 다른 일반적인 파이썬 웹 프레임 워크를 플러그인 할 수있는 다른 많은 서버가 있습니다. 이를 WSGI 서버라고합니다. 좋은 '기본'하나는 '웨이트리스'http://waitress.readthedocs.org/en/latest/입니다.이 라이브러리는 순수한 파이썬 서버이므로 별도의 라이브러리 나 기타 라이브러리가 필요하지 않습니다. 또한 gevent WSGI 서버, gunicorn, uwsgi도 좋습니다 ...하지만 작은 단일 (또는 소수의) 사용자 응용 프로그램에는 별 문제가되지 않습니다.

대중이 접근 할 수 있도록 인터넷에 물건을 올리면 nginx (또는 이와 비슷한) 뒤에있는 플라스크 응용 프로그램을 "역방향 프록시"로 숨겨서 번호를 제한 할 수있는 경우가 많습니다. 밖으로 freaking하지 않고 요청의, 그리고 일반적으로 일들을 제정신으로 유지.

어쨌든 긴 컴퓨팅 작업의 응답 시간은 10 초입니다. 일이 1 분보다 오래 걸린다면, 나는이 일들에 대한 일종의 외부 프로세스를 조사하고 모니터링해야한다고 말하고 싶습니다.

다른 사람들이 이와 같은 작업을 시작할 수 없도록주의해야합니다. 많은 사람들이 컴퓨터를 사용하여 계산하는 데 오랜 시간이 걸리는 작업을 요청하는 것은 쉽습니다. 이러한 서비스에 대해 암호 (적어도!) 보호 기능을 사용해야합니다.

경로 사용이 잘못되었지만 - /result/<word>이면 충분합니다. 후에 뭐? 실제로 경로의 일부가 아닙니다. 요청 인수입니다. flask.request 객체를 통해 액세스 할 수 있습니다 (문서 확인).

재미있게 보내세요! :-)

관련 문제