python 轮询,长轮询
Posted huay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 轮询,长轮询相关的知识,希望对你有一定的参考价值。
轮询相关
用于消息和投票等
轮询
1.采用js 定时请求。
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> li cursor: pointer; </style> </head> <body> <ul id="userList"> % for key,val in users.items() % <li uid="key">val.name (val.count)</li> % endfor % </ul> <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script> <script> $(function () $(‘#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); </script> </body> </html>
python
from flask import Flask,render_template,request,jsonify app = Flask(__name__) USERS = ‘1‘:‘name‘:‘jack‘,‘count‘:1, ‘2‘:‘name‘:‘rose‘,‘count‘:0, ‘3‘:‘name‘:‘anner‘,‘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)
长轮询
1.采用队列,递归,多线程实现。
html
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> li cursor: pointer; </style> </head> <body> <ul id="userList"> % for key,val in users.items() % <li uid="key">val.name (val.count)</li> % endfor % </ul> <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script> <script> $(function () $(‘#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(); ) </script> </body> </html>
python
from flask import Flask,render_template,request,jsonify,session import uuid import queue app = Flask(__name__) app.secret_key = ‘asdfasdfasd‘ USERS = ‘1‘:‘name‘:‘jack‘,‘count‘:1, ‘2‘:‘name‘:‘rose‘,‘count‘:0, ‘3‘:‘name‘:‘anner‘,‘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=5) ret[‘data‘] = users except queue.Empty: ret[‘status‘] = False return jsonify(ret) if __name__ == ‘__main__‘: app.run(host=‘192.168.3.10‘,threaded=True) # app.run(threaded=True)
以上是关于python 轮询,长轮询的主要内容,如果未能解决你的问题,请参考以下文章