わかりました、それは良いアプローチかもしれません...
ディレクトリをチェックして古いファイルを削除するスクリプトを作成し、削除されていないファイルから最も古いファイルを選択できます。そのファイルが作成されてからの経過時間を計算し、そのファイルの削除までの残り時間を計算します。次にsleep
、残り時間で関数を呼び出します。時間がsleep
終了して別のループが始まると、(少なくとも) 1 つのファイルが削除されます。ディレクトリにファイルがない場合は、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関数を読んだ方が良いでしょう。