zoukankan      html  css  js  c++  java
  • 通过queue实现前端的被动接收

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

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

    可以通过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')
  • 相关阅读:
    python3使用django1.11不支持MYSQL-python的解决办法
    abp学习目录
    日常网站整理
    C#使用TransactionScope实现事务代码
    CSS禁止选择
    数据库三种事务
    设计模式总章
    几种排序方法的总结
    将图片压缩成大小格式小的图片
    常用的wsdl地址
  • 原文地址:https://www.cnblogs.com/pyweb/p/11395424.html
Copyright © 2011-2022 走看看