Ich habe ein Web-Frontend für eine Flask-App, die einige schwere Berechnungen am Back-End durchführt, bevor die berechneten Daten per JSON an das Frontend übergeben werden.Flask Ajax gibt mehrere Status zurück vor der Ausführung
Das Problem ist, dauert die Berechnung mehrere Minuten, und im Idealfall möchte ich das Front-End wissen, die% erledigt und Status der Anfrage, anstatt still dort sitzen.
JS Ajax-Request-Front-End:
function runBacktest() {
$.ajax({
type: "POST",
url: '/backtest',
data: {
run_partial: 1,
use_saved_model: false,
saved_model_file: 'model.h5'
},
dataType: "json",
success: function(data) {
//Successful data
},
error: function() {
alert('There was a problem contacting the server.');
}
});
}
Python-Backend:
@webapp.route('/backtest', methods=['POST'])
def backtest():
print('> Running Backtest...')
"""Calculation code goes on here"""
print('Percent Completed: \r{0:.1f}%'.format(round(pct_done,1)), end='')
"""Serialise each agent instance into a dictionary and put in list to be converted to JSON object"""
agents_serialised = [agent.__dict__ for agent in bt_engine.agents]
return json.dumps(agents_serialised)
Frage ist, wie ich so etwas wie der Prozentsatz passieren kann getan, die ich auf stdout bin Druck auf jede Veränderung des Prozentsatzes, zum Frontend? Gefolgt von dann die Json-Daten übergeben, sobald es fertig ist?
Wenn Sie dies tun werden, ich die [ 'xhr' Parameter] empfehlen (https://stackoverflow.com/questions/22502943/ jquery-ajax-progress-via-xhr), um auf der Clientseite einen Fortschrittsereignis-Listener für die Anforderung hinzuzufügen. Auf diese Weise kann Ihr JavaScript tatsächlich einen Blick auf diese JSON-Objekte werfen, die während der Anfrage gesendet werden. –