后端 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?