2016-06-13 5 views
0

웹 서비스에 대한 긴 요청을 시뮬레이트하기 위해 응답을 생성하는 동안 휴면 모드가 유지됩니다. dev 서버를 threaded=True과 함께 실행하고 있습니다. 브라우저에서 세 개의 탭을 열면 첫 번째 스레드가 완료 될 때까지 두 번째 탭에 업데이트가 표시되지 않습니다. 그러나 두 번째 완료되기 전에 세 번째 탭 으로 시작합니다. 나는 threaded=True 대신에 processes=4을 사용하여 같은 것을 경험했다. 왜 다른 스레드가 처음으로 끝날 때까지 기다리는 것처럼 보입니까?스레드 모드의 Flask dev 서버는 여전히 첫 번째 스레드가 완료 될 때까지 대기합니다.

import sys 
from flask import Flask, Response 

PORT = 5002 
SECONDS = 20 

# create app 
app = Flask(__name__) 
app.config.from_object(__name__) 

@app.route('/wait') 
def wait(): 
    def generate(): 
     for i in range(SECONDS + 1): 
      if i == 0: 
       yield "<html><body>Getting data: <pre>" 
      import time 
      time.sleep(1) 
      if i < SECONDS: 
       print "tick" 
       yield "." 
      else: 
       yield "Finished after %ss.</pre></body></html>" % SECONDS 
    return Response(generate(), mimetype="text/html") 

def runserver(): 
    app.run(host='0.0.0.0', port=PORT, threaded=True) 

if __name__ == '__main__': 
    runserver() 

답변

0

브라우저에 문제가있는 것 같습니다. Google 크롬으로 테스트 할 때 질문에 설명 된 동작이 발생합니다. 첫 번째 스레드가 완료되기 전에 두 번째 스레드가 시작되지 않습니다.

테스트와 함께 :

wget -qO- http://localhost:5002/wait 

나는 올바른 응답을 경험한다. 각 콘솔은 즉시 출력을 표시합니다.