Flask:请求,返回有关先前请求状态的信息

时间:2020-01-01 13:30:51

标签: python python-3.x flask

Flask应用程序中,有一条路由/getFiles/。调用路由时,将执行文件下载。即将开始下载之前,便会绘制出确切的localization文件下载位置。问题是:如何编写路由/checkGetFilesStatus/,该路由返回上一个/getFiles/请求的状态(到目前为止已下载了多少文件)?应用程序的使用如下:用户在浏览器的选项卡中调用/getFiles/。然后,一段时间后,用户在浏览器中打开另一个标签并调用/checkGetFilesStatus/

from flask import Flask, request
import urllib.request as req
import urllib.error
import uuid


file_list = ["https://test.com/file1.mp4", "https://test.com/file2.dll", "https://test.com/file3.avi"]
base_localization = "somewhere/"
@app.route('/getFiles/')
def get_files():
    for url in file_list:
        localization = base_localization + uuid.uuid4().hex[:6].upper() + url[url.rfind('.'):]
        try:
            req.urlretrieve(url, localization)
        except urllib.error.HTTPError:
            pass

@app.route('/checkGetFilesStatus/')
def check_get_files_status:
    # ...
    # ...
    # n = ...
    # ...
    return "Already downloaded " + str(n) + " from " + len(file_list) + " files."

1 个答案:

答案 0 :(得分:0)

实现所需功能的方法有很多。

更有意义的一种方法是使用消息队列,例如RedisRabbitMQ并检查队列中AcknowledgedAccepted作业的状态。

解决此问题的另一种方法是创建一个像downloaded_files这样的全局变量,然后全局更改该变量。这种方法仅适用于单工,并且每当您停止/启动脚本时,它将被重置。 (因为这样,您将邮件队列保留在RAM上)

相关问题