前端动态获取后台处理进度显示在进度条上

实现成果

这里写图片描述

实现思路

https://blog.csdn.net/q1w2e3r4470/article/details/72702406
我主要是借鉴了这篇博客的思路

我来简述一下他的思路,他前端用到了ajax异步请求,一个用于获取冗长的数据,就比如我后台要跑一千次统计,是需要很长时间的,另一个是一个周期ajax,每隔一段时间就去后台访问拿数据,后台巧妙的地方是开了一个全局变量,用于存放程序运行的状态,伪代码如下

全局变量s
主函数(前端请求这个链接需要比较长的时间才能返回数据):
    s=0
    ''''
    后台处理数据
    ''''
    s=10
    ''''
    后台处理数据
    ''''
    如此重复
    最后返回数据的时候s=100

辅助函数:
    返回s的值

这是他的实现思路,就是通过全局变量给主函数插桩,告知辅助函数主函数运行到哪一步了
两个ajxa用的很巧妙,很简单的一个实现方法

它山之石可以攻玉

他的思路的问题是没有考虑到并发性,多用户下肯定是不能用同一个全局变量s的

我的一个思路

众所周知,每个用户都有一个独立的会话,那么就可以,把这个全局变量存在session里面,实现互相不干扰。
思路肯定没问题的,但是被ajax的机制坑了,ajax异步请求的时候session是不能在后台函数没有执行完成的时候更新的,这就导致辅助函数不能访问到没执行完成主函数的session的

我的第二个思路

那么session不行,我索性将全局变量改成一个map,前端两个ajax在访问后台的时候,带一个随机数过去,作为map的key,全局变量作为map的value,这样随机数的冲突是很小的,后台执行进度可以并发访问了
前端伪代码

ajax1:
    异步访问主函数
    传递一个随机数seed
    等待数据返回并显示
    杀死定时器
定时器:
    ajax2:
        异步访问辅助函数
        传递一个随机数seed
        拿到后台map中的全局变量
        更改进度条显示为全局遍历的值

使用flask框架踩过的一些坑

首先要开启flask的多线程
不然后台是单线程的,前端异步访问,后台在处理主函数的时候根本无暇顾及辅助函数

    app.run(debug=True, threaded=True)

前端的form表单,JavaScript处理完要之后要return false,不然JavaScript提交一次后台,html表单又提交一次。。。

前端form表单设置了pattern值之后,点击事件,先是JavaScript那里处理,然后才经过pattern,所以JavaScript也要正则匹配,成功就处理完return false,不成功就return true,给pattern处理,input标签自带前端提示

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值