python在线投票系统系统_基于轮询实现实时的在线投票系统
需求
用户在投票的页面可以实时的监测到,投票详情
在这里我会通过轮询和长轮询(推荐使用这个,可以减少请求数,实时性也好)的方法来实现
基于轮询实现投票系统
大致的思路是前端开启一个定时器每隔10秒定时的向服务器获取投票的结果
from flask import Flask,render_template,request,jsonify
app = Flask(__name__)
USERS = {
'1':{'name':'贝贝','count':1},
'2':{'name':'小东北','count':0},
'3':{'name':'何伟明','count':0},
}
@app.route('/user/list')
def user_list():
import time
return render_template('user_list.html',users=USERS)
@app.route('/vote',methods=['POST'])
def vote():
uid = request.form.get('uid')
USERS[uid]['count'] += 1
return "投票成功"
@app.route('/get/vote',methods=['GET'])
def get_vote():
return jsonify(USERS)
if __name__ == '__main__':
# app.run(host='192.168.13.253',threaded=True)
app.run(threaded=True)
Title
cursor: pointer;
}
- {% for key,val in users.items() %}
- {{val.name}} ({{val.count}}){% endfor %}
$('#userList').on('dblclick','li',function () {
var uid= $(this).attr('uid');
$.ajax({
url:'/vote',
type:'POST',
data:{uid:uid},
success:function (arg) {
console.log(arg);
}
})
});
});/*获取投票信息*/function get_vote() {
$.ajax({
url:'/get/vote',
type:"GET",
dataType:'JSON',
success:function (arg) {
$('#userList').empty();
$.each(arg,function (k,v) {
var li= document.createElement('li');
li.setAttribute('uid',k);
li.innerText= v.name + "(" + v.count + ')';
$('#userList').append(li);
})
}
})
}
setInterval(get_vote,3000);
templates/user_list.html
缺点 : 获取票数的实时性不好,频繁的向服务器发送请求
基于长轮询实现投票系统
基本的思路:
前端: 通过递归发送查询投票详情的请求,更新数据 (数据驱动模型)
服务端 :如果没有人来投票服务器把所有用户的请求hang住10秒,把原有的信息返回,如果在这等待的10s中有人来投票,直接返回最新的结果给所有hang住的用户
基于队列queue的阻塞, 来实现hang住请求,queue的基本用法如下
import queue
q = queue.Queue()
val = q.get()
print(val)
try:
val = q.get(timeout=10)
print(val)
except queue.Empty:
pass
run.py
from flask import Flask,render_template,request,jsonify,session
import uuid
import queue
app = Flask(__name__)
app.secret_key = 'asdfasdfasd'
USERS = {
'1':{'name':'贝贝','count':1},
'2':{'name':'小东北','count':0},
'3':{'name':'何伟明','count':0},
}
QUEQUE_DICT = {
# 'asdfasdfasdfasdf':Queue()
}
@app.route('/user/list')
def user_list():
user_uuid = str(uuid.uuid4())
QUEQUE_DICT[user_uuid] = queue.Queue()
session['current_user_uuid'] = user_uuid
return render_template('user_list.html',users=USERS)
@app.route('/vote',methods=['POST'])
def vote():
uid = request.form.get('uid')
USERS[uid]['count'] += 1
for q in QUEQUE_DICT.values():
q.put(USERS)
return "投票成功"
@app.route('/get/vote',methods=['GET'])
def get_vote():
user_uuid = session['current_user_uuid']
q = QUEQUE_DICT[user_uuid]
ret = {'status':True,'data':None}
try:
users = q.get(timeout=10)
ret['data'] = users
except queue.Empty:
ret['status'] = False
return jsonify(ret)
if __name__ == '__main__':
app.run(host='192.168.13.253',threaded=True)
# app.run(threaded=True)
Title
cursor: pointer;
}
- {% for key,val in users.items() %}
- {{val.name}} ({{val.count}}){% endfor %}
$('#userList').on('click','li',function () {
var uid= $(this).attr('uid');
$.ajax({
url:'/vote',
type:'POST',
data:{uid:uid},
success:function (arg) {
console.log(arg);
}
})
});
get_vote();
});/*获取投票信息*/function get_vote() {
$.ajax({
url:'/get/vote',
type:"GET",
dataType:'JSON',
success:function (arg) {if(arg.status){
$('#userList').empty();
$.each(arg.data,function (k,v) {
var li= document.createElement('li');
li.setAttribute('uid',k);
li.innerText= v.name + "(" + v.count + ')';
$('#userList').append(li);
})
}
get_vote();
}
})
}
templates/user_list.html
python在线投票系统系统_基于轮询实现实时的在线投票系统相关推荐
- 【毕业设计系列】033:基于MATLAB语言的实时变声器系统【含Matlab源码】
Date:2022.5.5 文章目录 前言 1.算法原理 2.实现效果 2.1.男声变女声 2.2.女声变男声 2.3.男声变大叔声 3.部分matlab代码实现 前言 在大学毕业设计中,要求实现一个 ...
- 【毕业设计/Matlab系列】基于MATLAB语言的实时变声器系统
Date:2022.5.5 文章目录 前言 1.算法原理 2.实现效果 2.1.男声变女声 2.2.女声变男声 2.3.男声变大叔声 3.部分matlab代码实现 前言 在大学毕业设计中,要求实现一个 ...
- 《智能步态识别门禁系统》,基于深度学习的多人步态识别系统
本文章仅仅提供一种自认为比较科学的方式去实现多人步态识别,如果对多人步态识别感兴趣,却又不知道如何实现的话,这篇文章将会有莫大的帮助.以下方法作者皆实验过是可行的方案.(训练集124人,准确率96%, ...
- python 优雅退出_Python学习教程:Python 使用 backoff 更优雅的实现轮询
我们经常在开发中会遇到这样一种场景,即轮循操作.今天介绍一个Python库,用于更方便的达到轮循的效果--backoff. Python学习教程:Python 使用 backoff 更优雅的实现轮询 ...
- java ajax轮询代码_AJAX轮询的实时监控画面
上一篇我们通过异步刷新Ajax 技术,来实现监控页面监控位号值的刷新,采用Ajax (AsynchronousJavascriptAndXML)技术,是指一种创建交互式.快速动态网页应用的网页开发技术 ...
- python dag调度系统开发_基于机器学习的DAG调度平台
什么是DAG? 有向无环图 树形结构:除根节点,每个节点有且仅有一个上级节点,下级节点不限.根节点没有上级节点. 图结构:每个节点上级.下级节点数不限. DAG调度平台的定义及场景 任务调度是在各行各 ...
- python django做网页论文_基于PythonDjango框架的多媒体发布系统
, Models. py 组成,其中 Urls.py 为整个项目的路由表,当使用者访问特 定的 url 时 , Urls.py 将请求指向 Views.py (视图函数)中特定 的函数,在视图函数中与 ...
- python dag调度系统开发_基于DAG的分布式任务调度平台-Maat
背景 什么是Maat Maat是一个基于开源项目Airflow的流程调度系统,它支持用户自定义地组装流程节点,流程可以在用户指定的时间触发(支持crontab格式),或由用户手动触发. Maat的所有 ...
- python裂缝检测_基于卷积神经网络的高楼外墙裂缝检测系统
fy the severity, general or slight damage degree of external wall cracks, and the effective identifi ...
最新文章
- [C/C++基础知识] 面试再谈struct和union大小问题
- Java并发编程—如何实现线程的超时中断
- 爬虫python 科研有用吗_为什么说用python写爬虫有优势?
- html中写随机数,为HTML生成一个随机数
- Java时间和日期指南
- LeetCode 642. 设计搜索自动补全系统(Trie树)
- mysql 8.0 重置数据库,Mysql 8.0安装及重置密码问题
- quartus生成qdb文件_(原创)详解Quartus导出网表文件:.qxp和.vqm
- jquery tmpl 详解
- 瑞利信道:从原理到实现
- linux壁纸图片不让复制,一些不常见到的LINUX壁纸,老规矩只提供给红联的兄弟姐妹...
- java软尾山地车评测_GT Sensor X Pro 软尾山地自行车测评
- 小学三年级另类语文题难住大学副教授(图)
- MongoDB的安装与可视化工具Studio 3T的安装
- android仿ppt,android 仿ppt进入动画效果合集
- 到底什么是5G LAN?
- Centos下如何永久修改系统时间 hwclock
- iOS开发 Tips 保存视频文件到相册
- 计算机音乐谱安娜的橱窗,钢琴谱 - 安娜的橱窗(2)
- 微信客服接口 报错40003
热门文章
- 睢宁 计算机学校,江苏睢宁中等专业学校2021年招生录取分数线
- 在处理时有错误发生: qmail qmail-run E: Sub-process /usr/bin/dpkg returned an error code (1)
- 截至2021年10月29日,安卓系统版本和Api Level对照表
- Springboot毕设项目扶贫管理系统p8k44(java+VUE+Mybatis+Maven+Mysql)
- Unity(三)三维数学和坐标系统
- 服务器托管怎么收费?
- linux--redis安装
- operation 04
- 爱普生打印机打印乱针与不自动到撕纸处处理办法
- python教程 w3c_W3C全套PDF教程 - 下载 - 搜珍网