2016-10-25 19 views
5

Ponowne otwarcie to pytanie na żądanie (error: [Errno 10053]), zapewniając minimalny dającej się przetestować przykład:Kolba - socket.error: [ERRNO 10053] Nawiązane połączenie zostało przerwane przez oprogramowanie w komputerze hosta

import time 
from flask import Flask, render_template 
app = Flask(__name__, static_folder='static', template_folder='templates') 

@app.route('/') 
def main(): 
    return render_template('test.html') 

@app.route('/test') 
def test(): 
    print "Sleeping. Hit Stop button in browser now" 
    time.sleep(10) 
    print "Woke up. You should see a stack trace from the problematic exception below." 
    return render_template('test.html') 

if __name__ == '__main__': 
    app.run() 

HTML :

<html> 
<body> 
<a href="/test">test</a> 
</body> 
</html> 

przewodnik: Uruchom aplikację, przejdź do localhost: port, kliknij na link, a następnie naciśnij przycisk Zatrzymaj w przeglądarce. Powinieneś zobaczyć wyjątek po zakończeniu snu. Sen jest niezbędny do symulacji aktywności wykonywanej na serwerze. Może to być tylko kilka sekund: jeśli użytkownik zdoła odejść od strony - Flask się zawiesi.

socket.error: [Errno 10053] An established connection was aborted by the software in your host machine

Dlaczego serwer przestaje obsługiwać aplikację? Jakiego innego serwera mogę użyć do mojej aplikacji Flask, aby tego uniknąć?

+1

jeśli służyć za pośrednictwem jednego z zalecanych sposobów (tj Apache lub nginx) to prawdopodobnie nie będzie problemem w wszystko ... –

+0

Odpowiedziałem na podobny problem z dokładnie tą samą odpowiedzią wcześniej, więc skopiowałem to do tego (inne pytanie dotyczy współbieżnych żądań, ale zatrzymanie 'curl' prowadzi do przerwania potoku rury). –

Odpowiedz

11

Jest to problem związany z implementacją modułu Python 2 modułu SocketServer, którego nie ma w Pythonie 3 (gdzie serwer nadal wykonuje operację).

Twój masz 3 opcje:

  • nie wolno używać wbudowanego serwera dla systemów produkcyjnych (jest to rozwój serwer po wszystkich). Użyj odpowiedniego serwera WSGI, takiego jak gunicorn lub uWSGI,
  • Włącz tryb gwintowania za pomocą app.run(threaded=True); wątek umiera, ale nowy jest stworzony dla przyszłych wniosków,
  • Aktualizacja do Pythona 3.
+0

Potwierdzanie: zaktualizowano do wersji Python3, a problem już nie występuje. Dziękuję Ci! –

Powiązane problemy