协议管理平台 – 删除资源

这里是删除临时文件,该功能是协议配置平台中的一个脚本,关于协议配置平台,参照这里,第一个就是。

项目部署后,用户使用过程中,会产生很多没用的文件,主要来源包括:

  1. 添加或编辑时,预览过程中产生的临时文档;
  2. 上线(同步到云存储)之后的文档;

需要将这些文件删除,我采用的方式是定时批量删除的方案,为了防止删除正在预览或未同步的文档,删除时,设置了一个规则:只删除最后修改时间在一小时以上的文件。

为了优化操作,还添加了在不同时间段指定不同的删除频率来降低CPU使用率的策略。9:00-22:00 每半小时清理一次;22:00-次日9:00,每两小时清理一次;

具体实现

用到的特殊模块或方法:

  • time.sleep(秒数) :推迟当前线程的执行,参数为推迟的秒数;即多少秒后继续执行后边的逻辑;
  • os.walk(path):文件、目录遍历器,可以高效的处理文件、目录相关的操作;
  • os.path.getmtime(filePath):获取文档的最后修改时间;
#!/usr/bin/env python
# coding=utf-8
import sys, json, os, shutil, re, time
import psutil
 
reload(sys)
sys.setdefaultencoding('utf8')
 
# 按时间段设置 检测间隔
# 时间段:时间间隔(分钟)
timeArr = {
    0: 60 * 2,  # 2小时检测一次
    7: 30,  # 工作时间30分钟检测一次
    22: 60 * 2
}
# 删除更新时间超过1小时的文件
delFileTime = 60 * 60 * 1
 
def delete_main(uploadPath):
    nowTime = time.time()
    # root 当前目录路径  # dirs 当前路径下所有子目录  # files 当前路径下所有非目录子文件
    print(u'检测删除:' + uploadPath)
    for root, dirs, files in os.walk(uploadPath):
        for fileItem in files:
            allPath = root + '\\' + str(fileItem)
            updateTime = os.path.getmtime(allPath)
            timeSpan = nowTime - updateTime
 
            if (timeSpan > delFileTime):
                os.remove(allPath)
                print(u'删除:' + allPath)
 
# 获取当前时间的时间间隔
def getTimeSpan():
    timeArr[24] = 0
    timeList = timeArr.items()
    timeList.reverse()
 
    localtime = time.localtime(time.time())
    hour = localtime.tm_hour
 
    i = 0
    timeLen = len(timeList)
    for key, value in timeList:
        if (i >= timeLen - 1):
            break
        if (hour > key):
            return value * 60
        i += 1
 
    # 默认1小时
    return 60 * 60 * 1
 
# 获取脚本文件的当前路径,不包括文件名  E:\Mine\store\python\start\learn\request
def getCurPath():
    # 获取脚本路径
    path = sys.path[0]
    # 判断为脚本文件还是py2exe编译后的文件,如果是脚本文件,则返回的是脚本的目录,如果是py2exe编译后的文件,则返回的是编译后的文件路径
    if os.path.isdir(path):
        return path
    elif os.path.isfile(path):
        return os.path.dirname(path)
 
 
if __name__ == "__main__":
    curPath = getCurPath()  # E:/Mine/toolset/protocol-builder/script/task
    curPath = re.sub(r'script\\task', '', curPath)
    arr = [curPath + 'public/upload', curPath + 'server/output']
    print(u"删除目录:" + str(arr))
  
    # 删除
    while True:
        i = 0
        for path1 in arr:
            delete_main(path1)
            i += 1
        timeSpan = getTimeSpan()
        time.sleep(timeSpan)

如果这篇文章对你有用,可以点击下面的按钮告诉我

0

发表回复