Werkzeug BaseWSGIServer Thread Hangs after Handling Request. Terminal UnresponsivePython

Python-Programme
Guest
 Werkzeug BaseWSGIServer Thread Hangs after Handling Request. Terminal Unresponsive

Post by Guest »

Das hat mich mehr als eine Woche lang davon abgehalten, irgendetwas Nützliches zu tun – wenn Sie Erfahrung mit Python/Werkzeug/Flask/Multi-Threading haben, helfen Sie bitte...
Jetzt, Normalerweise führen Sie eine Flask-App in einem separaten Terminal über py flask.py aus und müssen sie manuell hochfahren und mit Strg-C manuell deaktivieren. Meine Python-App benötigt diesen lokalen Server nur in bestimmten Fällen, zum Beispiel, um mithilfe des Autorisierungscode-Flows von Spotify ein Token zu erhalten, damit ich später über deren Web-API gültige Anfragen stellen kann.
Mein < Die Datei em>auth_server.py ist der „Abschnitt“, der für all dies verantwortlich ist. Hier lebt eine Klasse namens LocalServerThread, die Thread unterordnet und wörtlich aus dieser Antwort übernommen wurde. Vor 8 Jahren war dies die einzige brauchbare Antwort für Windows in einem Meer von Scheiße; Leider ist es heute nur noch ein teilweise funktionsfähiges Exemplar.
Hier ist es in seiner vollen Pracht:

Code: Select all

from werkzeug.serving import make_server

class ServerThread(threading.Thread):
THREAD_NAME = 'LocalServerThread'

def __init__(self, app):
threading.Thread.__init__(self, name=LocalServerThread.THREAD_NAME)
self.server = make_server('127.0.0.1', 8080, app)
self.ctx = app.app_context()
self.ctx.push()

def run(self):
log.info('starting server')
self.server.serve_forever()

def shutdown(self):
self.server.shutdown()

def start_server():
global server
app = flask.Flask('myapp')
# App routes defined here
server = ServerThread(app)
server.start()
log.info('server started')

def stop_server():
global server
server.shutdown()
Hier ist der Rest des fraglichen Code in meinem auth_server.py :

Code: Select all

def start_local_http_server():
app = Flask(__name__)

@app.route('/')
def home():

@app.route('/login')
def login():

@app.route('/callback')
def callback():

global server
server = LocalServerThread(app)
server.start()
print(fr'Started {LocalServerThread.THREAD_NAME}, serving: http://127.0.0.1:8080')

def stop_local_http_server():
server.shutdown()
Hier ist mein aktueller Code von main.py, der diesen Code nutzt:

Code: Select all

if not auth_server.validate_token(reject=True):
auth_server.start_local_http_server()

time.sleep(4)

auth_server.stop_local_http_server()

print('Finally Done')
Jetzt fällt hier alles auseinander ...

Ich reite es mit py ./main.py. Wenn ich es einfach laufen lasse, funktioniert das Herunterfahren perfekt und schließe alles richtig. Gut. erfolgreich dient mir die Seite, und wenn das Programm self.server.shutdown () erreicht ist, hängt es dort nur zwischen 90 und 300 Sekunden, bevor er schließlich den Druck ('endlich')

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post