xticks barplot python flask long-polling

barplot - Long Polling en Python con Frasco



pandas plot (1)

Tal como lo mencionó el enlace @ Robᵩ, la aplicación del matraz está sobrecargada. Esto se debe a que una aplicación de matraz se encuentra en modo de subprocesamiento único de forma predeterminada cuando se ejecuta con app.run() , por lo que solo puede servir una solicitud por vez.

Puede iniciar múltiples subprocesos con:

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

O usando un servidor WSGI como gunicornio o uwsgi para servir un matraz con procesamiento múltiple:

gunicorn -w 4 myapp:app

¡Espero que estés disfrutando con Python y Flask!

Estoy tratando de hacer largas encuestas con JQuery y Python bajo el Flask Framework.

Después de haber realizado una encuesta larga en PHP, he tratado de hacerlo de la misma manera:

Un script / función que tiene un ciclo while (verdadero), verifica cambios periódicamente, por ejemplo, cada 0,5 segundos en la base de datos, y devuelve algunos datos cuando ocurre un cambio.

Así que en mi ini .py he creado una aplicación.ruta a / encuesta para que JQuery llame. JQuery le da cierta información sobre el estado actual del cliente, y la función poll () compara esto con lo que está actualmente en la base de datos. El ciclo finaliza y devuelve información cuando se observa un cambio.

Aquí está el código python:

@app.route(''/poll'') def poll(): client_state = request.args.get("state") #remove html encoding + whitesapce from client state html_parser = HTMLParser.HTMLParser() client_state = html_parser.unescape(client_state) client_state = "".join(client_state.split()) #poll the database while True: time.sleep(0.5) data = get_data() json_state = to_json(data) json_state = "".join(data) #remove whitespace if json_state != client_state: return "CHANGE"

El problema es que, cuando el código anterior comienza a sondear, el servidor parece estar sobrecargado y otras llamadas Ajax, y otras solicitudes, como cargar una imagen de "carga" en el html utilizando JQuery, no responden y se agota el tiempo de espera.

Para completar, he incluido el JQuery aquí:

function poll() { queryString = "state="+JSON.stringify(currentState); $.ajax({ url:"/poll", data: queryString, timeout: 60000, success: function(data) { console.log(data); if(currentState == null) { currentState = JSON.parse(data); } else { console.log("A change has occurred"); } poll(); }, error: function(jqXHR, textStatus, errorThrown) { console.log(jqXHR.status + "," + textStatus + ", " + errorThrown); poll(); } }); }

¿Esto necesita multihilo o algo así? ¿O alguien tiene alguna idea de por qué estoy experimentando este comportamiento?

¡¡Gracias por adelantado!! :)