后端 python flask,前端 vue,前端 vue 里多个 axios 请求(比如 for 循环)阻塞(pending),因为 ajax 是异步调用,请求阻塞就很奇怪了,下面记录该问题
# 效果展示
# 正常情况 (此时请求异步,不阻塞)
# 异常情况(此时请求 pending)
# 模拟代码
# Python 代码
@feature.route('/dependency/test1', methods=['POST']) | |
@login_required | |
def test11(): | |
import time | |
logger.info('post') | |
time.sleep(60) | |
return 'success' | |
@feature.route('/dependency/test2', methods=['GET']) | |
@login_required | |
def test22(): | |
logger.info('get post') | |
return 'success' |
# Vue 代码
test() {
this.otimer = setInterval(() => {
if(this.closeFlag){
clearInterval(this.otimer)
}
getRequest({ url: '/api/dependency/test2'})
}, 5000) // 5s一次请求
postRequest({
url: '/api/dependency/test1',
method: 'post'
}).then(res => {
this.closeFlag = true
})
//let a = 10;
// while(a < 15){
// getRequest({
// url: '/api/dependency/test2'
// })
// a++
// }
// for(a; a< 15; a++){
// getRequest({
// url: '/api/dependency/test2'
// })
// }
}
# 原因
因为使用了 flask-script 组件,启动脚本是 manage.py, 在执行 manage.py 的 main 方法时需要额外传入一些参数。
因此需要修改 pycharm Run/Debug Configurations 里的 Parameters 参数,加上 --threaded
runserver --host 0.0.0.0 --port 8080 --threaded
可以参考:https://flask-script.readthedocs.io/en/latest/
https://flask-script.readthedocs.io/en/latest/#:~:text=r/-R flag.-,threaded,-– should the process
threaded – should the process handle each request in a separate thread?