Python代码片段

1 记录函数执行耗时

 1 def timeToRunWithParams(level, param_idx_lst):
 2     def inner(func):
 3         def wrapper(*args, **kwargs):
 4             s_date = datetime.datetime.now()
 5             result = func(*args, **kwargs)
 6             duration = datetime.datetime.now() - s_date
 7             cost_ms = round(duration.total_seconds() * 1000, 2)
 8             if "DEBUG" == level.upper():
 9                 sub_params = [args[idx] for idx in param_idx_lst]
10                 log.info('func={} with sub_params={} cost={} milliseconds'.format(func.__name__, sub_params, cost_ms))
11             else:
12                 log.info('func={} cost={} milliseconds'.format(func.__name__, cost_ms))
13             return result
14         return wrapper
15     return inner
16 
17 @timeToRunWithParams(level="info", param_idx_lst=[])
18 def job():
19     # to do something
20     pass

 

2 HTTP请求失败自动重试

def make_request(url, timeout=30, max_retries=3):
    retry_delay = 1  # 初始重试间隔时间为1秒
    for i in range(max_retries + 1):
        try:
            response = req.get(url, timeout=timeout)
            response.raise_for_status()  # 检查请求是否成功
            return response  # 返回成功的响应
        except req.exceptions.RequestException as e:
            if i == max_retries:
                raise  # 如果已达到最大重试次数,则将异常抛出
            else:
                log.error("failed to request: {} \n retrying {} times in {} seconds...".format(url, i+1, retry_delay))
                time.sleep(retry_delay)
                retry_delay *= 2  # 增加重试间隔时间

 

3 输出日志

def get_logger(path='./', filename='access.log', level='debug'):
        log_level = {
            'debug': logging.DEBUG,
            'info': logging.INFO,
            'warning': logging.WARNING,
            'error': logging.ERROR,
            'critical': logging.CRITICAL
        }
        level = 'debug' if level not in log_level else level
        if not os.path.exists(path):
            os.makedirs(path)
        logfile = os.path.join(path, filename)
        formatter = logging.Formatter("%(asctime)s.%(msecs)03d [line:%(lineno)d] %(levelname)s %(message)s",
                                    datefmt="%Y-%m-%d %H:%M:%S")
        handler = logging.FileHandler(logfile, mode='a')
        handler.setFormatter(formatter)
        # logger = logging.getLogger(__name__)
        logger = logging.getLogger(filename)
        logger.setLevel(log_level[level])
        logger.addHandler(handler)
        return logger

 

4 自定义异常

class CustomException(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)
    def __str__(self):
        return "Custom Exception: {}".format(self.message)

raise CustomException("desc of panic")

  

  

 

posted @ 2022-11-16 11:38  青山应回首  阅读(25)  评论(0编辑  收藏  举报