# @Time : 2023/8/15 22:00 # @Author : Lan # @File : tasks.py # @Software: PyCharm import asyncio import logging import os from tortoise.expressions import Q from apps.base.models import FileCodes from apps.base.utils import ip_limit from core.settings import settings, data_root from core.storage import FileStorageInterface, storages from core.utils import get_now async def delete_expire_files(): file_storage: FileStorageInterface = storages[settings.file_storage]() while True: try: # 遍历 share目录下的所有文件夹,删除空的文件夹,并判断父目录是否为空,如果为空也删除 if settings.file_storage == "local": for root, dirs, files in os.walk(f"{data_root}/share/data"): if not dirs and not files: os.rmdir(root) await ip_limit["error"].remove_expired_ip() await ip_limit["upload"].remove_expired_ip() expire_data = await FileCodes.filter( Q(expired_at__lt=await get_now()) | Q(expired_count=0) ).all() for exp in expire_data: await file_storage.delete_file(exp) await exp.delete() except Exception as e: logging.error(e) finally: await asyncio.sleep(600)