批量删除桶内对象 coding: utf8 import logging from logging.handlers import RotatingFileHandler import platform import pathlib import os loglevelswitch {"DEBUG": logging.DEBUG, "INFO": logging.INFO, "WARNING": logging.WARNING, "ERROR": logging.ERROR, "CRITICAL": logging.CRITICAL} def setlogger(levellogging.ERROR, filepath "logobjsclean.log", name"objsclean", formatstringNone): if not formatstring: formatstring "%(asctime)s [%(levelname)s] process:%(process)d thread:%(thread)d, %(filename)s:%(lineno)d %(message)s" logger logging.getLogger(name) if not logger.handlers: logger.setLevel(level) fh RotatingFileHandler(filepath, maxBytes1024 20, backupCount5) fh.setLevel(level) fh.setFormatter(logging.Formatter(formatstring)) logger.addHandler(fh) def createlogpath(level): loglevel 'ERROR' if level: loglevel level.upper() if platform.system() 'Linux': filepath "/var/log/objsclean/" logfile "/var/log/objsclean/objsclean." + str(os.getpid()) + ".log" elif platform.system() 'Windows': filepath os.getcwd() + "log" logfile os.getcwd() + "logobjsclean." + str(os.getpid()) + ".log" folder os.path.exists(filepath) if not folder: os.makedirs(filepath) if not os.path.exists(logfile): pathlib.Path(logfile).touch() setlogger(loglevelswitch.get(loglevel, logging.ERROR), logfile, namestr(os.getpid())) bucketempty.py coding:utf8 from boto3.session import Session from botocore.client import Config import config import log import os import time import logging import threading from concurrent.futures import ThreadPoolExecutor, wait, ALLCOMPLETED from multiprocessing import Pool from time import strftime, localtime def errcall(value): logger logging.getLogger(str(os.getpid())) logger.error("errcall {0}".format(value)) def deletesubobjs(rescontents, s3client, logger): for obj in rescontents: keyname obj.get("Key") try: s3client.deleteobject( Bucketconfig.Bucketname, Keykeyname ) logger.debug("delete obj {0} complete...".format(keyname)) except Exception as e: logger.error('file:{0}, objname:{1}, lineno:{2}'.format(e.traceback.tbframe.fglobals['file'], keyname, e.traceback.tblineno)) logger.error(e.args) def deleteobjs(rescontents): session Session(config.AK, config.SK) s3client session.client('s3', endpointurlconfig.URL, verifyFalse) log.createlogpath(config.loglevel) alogger logging.getLogger(str(os.getpid())) totalnums len(rescontents) begin 0 remaindernums 0 alogger.info("begin deleteobjs...") subentryobjnums totalnums // 50 if subentryobjnums config.multipoolnum2: slogger.info('waiting for cache to clear...') time.sleep(3) istruncated resobj.get('IsTruncated') nextkeymarker resobj.get('NextMarker') pool.close() pool.join() slogger.info('del end time :{0}'.format(strftime("%Y%m%d %H:%M:%S", localtime()))) 执行python bucketempty.py 即可。