Ejecuto la siguiente aplicación de matraz en el host local. Luego presioné la aplicación en address/place_job/ con una solicitud http. luego voy a mi navegador y busco la dirección/track_site/job/0
Comportamiento esperado: La palabra "foo" aparece inmediatamente.
comportamiento real: el navegador (edge / Chrome) espera / gira hasta que finaliza el hilo, y luego muestra inmediatamente la palabra foo
Pregunta: ¿Por qué ocurre el comportamiento real, en lugar del comportamiento esperado, y cómo lo soluciono? Preferiblemente sin clasificar al apio o similares.
No entiendo por qué sucede esto. Lo que realmente me molesta es que se produce el comportamiento esperado si elimino la línea <script> en el archivo .HTML. Lo he probado con threading.Thread, así como con el ejecutor threadpool del paquete Flass-Executor.
minimal_app.py:
from flask import Flask, render_template from threading import Thread from time import time app = Flask(__name__) def func(): print("started") start_time = time() while time()-start_time<20: pass print("ended") @app.route('/place_job/') def place_job(): Thread(target=func).start() return "OK" @app.route('/track_site/job/0') def track_job(): return render_template('minimal_template.html')estático/plantillas/minimal_template.html
<!DOCTYPE html> <html lang="en"> <body> <h1 id="id1"> Job Page </h1> <script type="text/javascript" src="/static/js/const.js"></script> <p id="id2"> foo </p> </body> </html>estático/js/const.js
const x = 0;editar
A continuación se muestra el registro del matraz después de solicitar /place_job/ y luego navegar a /track_site/job/0:
127.0.0.1 - - [22/Apr/2022 20:15:04] "GET /place_job HTTP/1.1" 308 - 127.0.0.1 - - [22/Apr/2022 20:15:04] "GET /place_job/ HTTP/1.1" 200 - started 127.0.0.1 - - [22/Apr/2022 20:15:12] "GET /track_site/job/0 HTTP/1.1" 200 - ended 127.0.0.1 - - [22/Apr/2022 20:15:24] "GET /static/js/const.js HTTP/1.1" 304 -