用户注销时删除旧的临时文件
Remove old temporary files when user is logged out
我有一个视图,它接受登录的用户输入,然后 运行 是一个生成报告的函数。结果在 HTML 页面中返回。我也将报告呈现为 PDF。
我使用函数中的内容创建了一个 PDF,并将其保存在服务器上的某个文件夹中。我不想让我的服务器充满来自每个 运行 的文件,所以我在每个用户登录时为他们创建一个临时文件夹(在 tmpfs 中)并将路径保存在他们的会话中,这不是永久的。
session['temp_path'] = '/dev/shm/<random_uuid>/'
用户可以通过单击注销按钮注销,否则他们的会话可能会过期。如何在用户注销后删除他们的临时文件夹?
点击注销按钮与结束会话的效果相同,对吗?
有两种方法可以做到这一点:1) 将代码添加到清理临时文件的会话过期例程,and/or2) 编写一个 cron
脚本来检查活动会话并清理非活动会话的临时文件。
如果有人对这个问题感兴趣,我用另一种方式解决了。我不检查用户是否注销或分别创建任何 cron 脚本。
我创建了一个对象,它为每个创建的 pdf 运行一个计数线程。经过一段时间后,pdf 将被删除。
代码如下所示:
class TimeSet(set):
def add(self, item, timeout):
set.add(self, item)
t = threading.Thread(target=timeout_set_remove, args=(self, item, timeout))
t.start()
def timeout_set_remove(my_set, item, timeout):
time.sleep(timeout)
os.remove(str(item))
my_set.remove(item)
在我的 Flask 应用程序中,我是这样使用它的:
set = TimeSet()
set.add(os.path.abspath(os.path.join(src_path, pdf_name)), app.config['PDF_PERSISTENCE'])
其中 pdf_name 是创建的 pdf 的名称,src_path 是文件的路径。持续时间在我的配置文件中定义。
我有一个视图,它接受登录的用户输入,然后 运行 是一个生成报告的函数。结果在 HTML 页面中返回。我也将报告呈现为 PDF。
我使用函数中的内容创建了一个 PDF,并将其保存在服务器上的某个文件夹中。我不想让我的服务器充满来自每个 运行 的文件,所以我在每个用户登录时为他们创建一个临时文件夹(在 tmpfs 中)并将路径保存在他们的会话中,这不是永久的。
session['temp_path'] = '/dev/shm/<random_uuid>/'
用户可以通过单击注销按钮注销,否则他们的会话可能会过期。如何在用户注销后删除他们的临时文件夹?
点击注销按钮与结束会话的效果相同,对吗?
有两种方法可以做到这一点:1) 将代码添加到清理临时文件的会话过期例程,and/or2) 编写一个 cron
脚本来检查活动会话并清理非活动会话的临时文件。
如果有人对这个问题感兴趣,我用另一种方式解决了。我不检查用户是否注销或分别创建任何 cron 脚本。
我创建了一个对象,它为每个创建的 pdf 运行一个计数线程。经过一段时间后,pdf 将被删除。
代码如下所示:
class TimeSet(set):
def add(self, item, timeout):
set.add(self, item)
t = threading.Thread(target=timeout_set_remove, args=(self, item, timeout))
t.start()
def timeout_set_remove(my_set, item, timeout):
time.sleep(timeout)
os.remove(str(item))
my_set.remove(item)
在我的 Flask 应用程序中,我是这样使用它的:
set = TimeSet()
set.add(os.path.abspath(os.path.join(src_path, pdf_name)), app.config['PDF_PERSISTENCE'])
其中 pdf_name 是创建的 pdf 的名称,src_path 是文件的路径。持续时间在我的配置文件中定义。