用户注销时删除旧的临时文件

时间:2015-06-04 10:08:34

标签: python session flask temporary-files

我有一个视图,记录用户输入,然后运行一个函数来生成报告。结果将在HTML页面中返回。我也将报告呈现为PDF。

我使用我的函数中的内容创建PDF并将其保存在服务器上的某个文件夹中。我不想让我的服务器充满每次运行的文件,所以我在每个用户登录时为每个用户创建一个临时文件夹(在tmpfs中),并在会话中保存路径,这不是永久性的。

session['temp_path'] = '/dev/shm/<random_uuid>/'

用户可以通过单击注销按钮注销,或者他们的会话可能会过期。如何在用户注销后删除用户的临时文件夹?

2 个答案:

答案 0 :(得分:0)

单击注销按钮与会话到期相同,对吧?

有两种方法可以做到这一点:1)将代码添加到会话过期例程以清理临时文件,和/或2)编写一个cron脚本来检查活动会话并清理非活动会话的临时文件。

答案 1 :(得分:0)

如果有人对这个问题感兴趣,我就用另一种方式解决了。我不检查用户是否分别注销或创建任何cron脚本。

我创建了一个Object,它为每个创建的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)

在我的烧瓶应用程序中,我使用它:

set = TimeSet()
set.add(os.path.abspath(os.path.join(src_path, pdf_name)), app.config['PDF_PERSISTENCE'])

其中 pdf_name 是创建的pdf的名称, src_path 是文件的路径。持久时间在我的配置文件中定义。