Flask 应用响应时间长,导致浏览器连接被重置

2 投票
1 回答
1851 浏览
提问于 2025-04-18 13:31

我刚开始学习网页开发,正在用Flask这个框架。

我写了一个小应用,可以接收用户填写的表单,然后把这些信息保存在后台的文本文件里,前面的步骤都很顺利。

接下来,我把用户重定向到另一个链接,但在重定向后,应用会执行一个系统命令,这个命令大约需要15到20秒才能完成。在这段时间里,我的浏览器就会出现连接重置的情况。虽然后台的任务在这之后还是完成了。

问题出现在用户被重定向到下面的代码(网址)时。在到达返回语句之前,连接就已经重置了。请告诉我,如何在浏览器和应用之间保持会话,直到应用能响应浏览器。

@app.route('/running', methods=['GET'])
def running():
    os.system('echo $(date +[%Y/%m/%d_%H:%M:%S])  >> /root/Tas/logs/SN_up_$(date +"%Y-%m-%d").log && /root/Tas/scripts/SN_upgrade.py &>> /root/Tas/logs/SN_up_$(date +"%Y-%m-%d").log')
    return 'Data processed'

1 个回答

2

如果你其实不想要系统命令的结果,我建议你可以把这个任务放到一个队列里去处理,比如用Flask-Celery。这样你可以在把任务提交到队列后立即返回,不用等结果。如果你愿意,可以给用户发送一个独特的链接,让他们可以稍后查看结果,或者通过电子邮件通知他们。

另外一个选择是尽量加快你的命令执行速度,因为20秒的等待时间远远超过了用户愿意等的时间。而且你也无法控制用户的超时时间。

撰写回答