好吧,我猜这可能是一个好方法......
您可以编写一个脚本来检查您的目录并删除过时的文件,并从未删除的文件中选择最旧的文件。计算自创建该文件以来经过了多少时间,并计算删除该文件的剩余时间。然后sleep
用剩余时间调用函数。当sleep
时间结束并开始另一个循环时,将(至少)有一个文件要删除。如果目录中没有文件,请将sleep
时间设置为 5 分钟。
这样你可以确保每个文件在 5 分钟后被删除,但是当同时创建的文件很多时,睡眠时间会大大减少,你的函数会越来越频繁地检查每个文件。为了避免在开始另一个循环之前为睡眠功能添加适当的延迟,例如,如果最旧的文件有 4 分钟的历史,您可以将睡眠设置为60+30
秒(添加所有时间计算 30 秒)。
一个例子:
from datetime import datetime
import time
import os
def clearDirectory():
while True:
_time_list = []
_now = time.mktime(datetime.now().timetuple())
for _f in os.listdir('/path/to/your/directory'):
if os.path.isfile(_f):
_f_time = os.path.getmtime(_f) #get file creation/modification time
if _now - _f_time < 300:
os.remove(_f) # delete outdated file
else:
_time_list.append(_f_time) # add time info to list
# after check all files, choose the oldest file creation time from list
_sleep_time = (_now - min(_time_list)) if _time_list else 300 #if _time_list is empty, set sleep time as 300 seconds, else calculate it based on the oldest file creation time
time.sleep(_sleep_time)
但正如我所说,如果经常创建文件,最好设置睡眠时间的延迟
time.sleep(_sleep_time + 30) # sleep 30 seconds more so some other files might be outdated during that time too...
此外,最好阅读getmtime函数以获取详细信息。