Tôi đang cố gắng thực hiện việc bỏ phiếu dài với JQuery và Python trong Khuôn khổ Flask.Thăm dò dài trong Python với Flask
Sau khi thực hiện bỏ phiếu dài trước đây trong PHP, tôi đã cố gắng để đi về nó theo cách giống nhau:
Một kịch bản/chức năng mà có một while (true) vòng lặp, kiểm tra các thay đổi theo định kỳ eg.every 0 , 5 giây trong cơ sở dữ liệu và trả về một số dữ liệu khi có thay đổi.
Vì vậy, trong số ini .py Tôi đã tạo một ứng dụng.đi tới/cuộc thăm dò để JQuery gọi. JQuery cung cấp cho nó một số thông tin về trạng thái hiện tại của máy khách và hàm poll() so sánh nó với những gì hiện có trong cơ sở dữ liệu. Vòng lặp kết thúc và trả về thông tin khi có thay đổi.
Dưới đây là đoạn code 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"
Vấn đề là, khi mã ở trên bắt đầu bỏ phiếu, các máy chủ dường như bị quá tải và Ajax khác gọi, và các yêu cầu khác như tải một "tải" ảnh để html bằng cách sử dụng JQuery không phản hồi và hết thời gian chờ.
Vì hoàn của tôi đã bao gồm các JQuery đây:
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();
}
});
}
Liệu điều này cần phải đa luồng hay cái gì? Hay bất cứ ai có bất kỳ ý tưởng tại sao tôi gặp phải hành vi này?
Cảm ơn trước !! :)
Xem http://stackoverflow.com/questions/14814201/can-i-serve-multiple-clients-using-just-flask-app-run-as-standalone –