在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."
答案 0 :(得分:0)
实现所需功能的方法有很多。
更有意义的一种方法是使用消息队列,例如Redis
或RabbitMQ
并检查队列中Acknowledged
或Accepted
作业的状态。
解决此问题的另一种方法是创建一个像downloaded_files
这样的全局变量,然后全局更改该变量。这种方法仅适用于单工,并且每当您停止/启动脚本时,它将被重置。 (因为这样,您将邮件队列保留在RAM
上)