Lange Abfragen in Python mit Flask

Ich versuche zu tun, long-polling mit JQuery und Python unter dem Flask-Framework.

Geleistet zu long-polling, bevor in PHP, ich habe versucht, darüber zu gehen, es auf die gleiche Weise:

Einem Skript/die Funktion, die hat eine while(true) - Schleife, prüft periodisch ändert zB.alle 0,5 Sekunden in der Datenbank, und gibt einige Daten, wenn eine änderung Eintritt.

Also in meinem ini.py habe ich eine app geschaffen.route nach /Umfrage für JQuery zu nennen. JQuery gibt es einige Informationen über den client den aktuellen Status und die poll () - Funktion vergleicht dies mit dem, was aktuell in der Datenbank. Die Schleife wird beendet und gibt Informationen, wenn eine Veränderung zu beobachten ist.

Hier der python code:

@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"

Das problem ist, dass, wenn der obige code beginnt polling, der server scheint überlastet werden und andere Ajax-calls, und andere Anforderungen wie das laden einer "loading" - Bild zu html mit JQuery reagiert und timeout.

Zur Vervollständigung halber habe ich die JQuery-hier:

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();

    }
});

}

Tut dies, müssen multi-Thread-oder was? Oder hat jemand eine Idee, warum ich bin, bei dem dieses Verhalten Auftritt?

Vielen Dank im Voraus!! 🙂

InformationsquelleAutor mickzer | 2015-04-08

Schreibe einen Kommentar