一般请求都是由前端主动发起请求,后端响应,但有些情况必须要后端达到一定条件了才向前端相应数据,这就变成前端被动了。比如微信接收信息,只有别人给你发消息,你才能被动接收消息。

最近做了个项目,当有人经过摄像头的时候,经过人脸识别,把识别出来的信息主动返回给前端。这种情况可以通过后端阻塞的方式实现,也就是让前端先发送一个请求给后端,后端阻塞,直到达到某种条件再响应,前端获取到响应数据的时候立马重新发送一个请求。

可以通过queue的方式实现

from queue import Queue
from flask import Flask, request, jsonify, session
from flask_cors import * import get_user app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
CORS(app, supports_credentials=True) # 和前端联调测试,允许跨域请求
q = Queue(maxsize=100) # 设置队列允许最大的元素,100个 @app.route('/', methods=['POST'])
def get_callback():
"""监听face++的回调函数,只要有人经过镜头,就会把信息发送给这个路由"""
data = request.get_json()
subject_id = data.get('subject_id')
# 根据subject_id获取员工信息
if subject_id is None:
data_one = {'name': '陌生人', }
else:
     # get_one为根据subject_id调用数据库数据的一个函数
data_one = get_user.get_one(subject_id)
data_one['gender'] = data['gender'] data_one['age'] = data['age']# 把数据放入队列,实现队列去重
li = []
if data_one in li:
return jsonify({'code': 203})
else:
li.append(data_one) # 把数据添加到列表模拟队列 try:
q.put(data_one, timeout=10) # 把数据添加到队列如果队列已经满了,再添加数据,超过10秒就抛异常
except:
pass return jsonify({'code': 200}) @app.route('/show',methods=['POST'])
def get_vote():
  """前端请求这个接口"""
ret = {'status': True,'data': None} # 构造一个json数据 try:
data_one = q.get() # 从队列取出数据,如果没有数据,会阻塞在这一步
ret['data'] = data_one
except:
ret['status'] = Falsereturn jsonify(ret) if __name__ == '__main__':
app.run(port=9010, host='0.0.0.0')

通过queue实现前端的被动接收的更多相关文章

  1. 【大话QT之十】实现FTP断点续传(需要设置ftp服务器为“PASV”被动接收方式)

    应用需求: 网盘开发工作逐步进入各部分的整合阶段,当用户在客户端修改或新增加一个文件时,该文件要同步上传到服务器端对应的用户目录下,因此针对数据传输(即:上传.下载)这一块现在既定了三种传输方式,即: ...

  2. Queue 消息的发送与接收(PTP 消息传递模型)

    上篇博客写到了JMS两种消息模型(P2P.pub/sub)<JMS两种消息模型>.本篇博客通过一个实例来进一步了解P2P模型. Queue消息的发送与接收--PTP消息传递模型,样例: Q ...

  3. FastSocket客户端/服务端通讯示例 客户端被动接收

    示例代码参见  http://www.cnblogs.com/T-MAC/p/fastsocket-asyncbinary-usage.html 我这里只写一份客户端如何被动接收的代码.   先从As ...

  4. Flask中向前端传递或者接收Json文件的方法

    1. 利用flask的request.form.get()方法 这一中方法主要利用flask的request.form.get方法,获得前端发送给后台的json文件 Python 端代码: @app. ...

  5. nodejs通过buffer传递数据到前端,前端通过arraybuffer接收数据

    以后端传送threejs中的点阵数组为例: 后端: let buffer = Buffer.alloc((points.length + 4) * 4) //points.length + 4:预留前 ...

  6. C#无限分级实现,前端WEB页面接收,后台提供层级Json数据

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...

  7. (前端常考面试题)从敲入 URL 到浏览器渲染完成,到底发生了什么 ?

    前言 小汪最近在看[WebKit 技术内幕]一书,说实话,这本书写的太官方了,不通俗易懂. 但是看完书,对浏览器内核的 WebKit 有了进一步的了解,所以从浏览器内核出发,写这篇文章以记录学到的知识 ...

  8. 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

    前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正. 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目. ...

  9. 从输入url开始,完善前端体系架构

    原文链接: https://segmentfault.com/a/1190000013662126 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! javascript 前端 23 ...

随机推荐

  1. Canvas和SVG的比较

    Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XML 描述 2D 图形的语言. SVG 基于 XML,这意味着 SVG DOM 中的每个 ...

  2. MiniUI学习笔记1-表单控件

    1.输入框样式 class="mini-textbox" //普通输入框 class="mini-password" //密码输入框 class="m ...

  3. python常用函数 U

    update(dict) 字典合并,生成的为新的字典,新字典操作不会影响老字典. 例子:

  4. linux系统安装telnet服务

    linux安装telnet 安装前准备工作 1.安装telnet服务需要三个软件包:telnet.telnet-server和xinetd包. telnet,telnet-sever,xinetd软件 ...

  5. 理解Promise (3)

    在promise  的then  中我们不仅有 成功状态 失败状态,可能还有等待状态,所以我们要对等待状态进行处理 function Promise(executor) { let self = th ...

  6. k8s 1.9.0-手动安装-2

    1 下载etcd新版 https://github.com/coreos/etcd/releases 直接下载k8s的二进制包 https://github.com/kubernetes/kubern ...

  7. RMQ Message ACK

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11808680.html 消息持久化机制 消息丢失了,需要将队列持久化,即将autoDelete设置成f ...

  8. Windows里服务中没有 MySQL

    1.以管理员身份启动命令提示符 2.安装并启动MySQL服务 C:\Windows\system32>mysqld.exe -installService successfully instal ...

  9. [洛谷 P1377] TJOI2011 树的序

    问题描述 众所周知,二叉查找树的形态和键值的插入顺序密切相关.准确的讲:1.空树中加入一个键值k,则变为只有一个结点的二叉查找树,此结点的键值即为k:2.在非空树中插入一个键值k,若k小于其根的键值, ...

  10. python 生成多维数组

    在刷题时用到了数组,因为不提供三方库所以不能使用Numpy.想如何通过python列表模拟数组. 第一种方法 """ 生成n*m的初始值为0的矩阵 "" ...