• 单例模式


    1,单例模式的实现,基于new方法实现

    """
    import threading
    class Singleton(object):
        instance = None
        lock = threading.RLock()
    
        def __new__(cls, *args, **kwargs):
            if cls.instance:
                return cls.instance
            with cls.lock:
                cls.instance = object.__new__(cls)
                return cls.instance
    
    def task():
        obj = Singleton()
        print(obj)
    
    for i in range(10):
        t = threading.Thread(target=task)
        t.start()
    """
    

    2. __new__方法返回的是什么?

    '''
    新创建的对象,内部没有数据,需要经过init来进行初始化。
    '''
    

    3,基于文件实现的方式

    """
    配置文件
    Django的admin
    数据库链接池
    写日志
    都是基于文件的方式实现了单例模式
    """
    

    4, 其他的单例模式

    """
    1. 装饰器类型,
    优点:可以将任意的类装饰为单例类,方便
    缺点:也是适用于单线程,当然可以通过加锁实现多线程,也是种极推荐的方法
    import threading
    
    def singleton(cls):
        __singleton = {}
        def mySingleton(*args, **kwargs):
            if cls not in __singleton:
                __singleton[cls] = cls(*args, **kwargs)
            return __singleton[cls]
        return mySingleton
    
    @singleton
    class A(object):
        data = None
        
        def hh(self):
            print('ggggggg')
    """
    

    5,log日志文件--单例模式的使用log.py

    '''
    imoprt logging
    class AutoLogger(object):
        def __init__(self,log_path,log_name):
            file_handler = logging.FileHandler(log_path, 'a', encoding='utf-8')
            fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s")
            file_handler.setFormatter(fmt)
    
            self.logger = logging.Logger(log_name, level=logging.DEBUG)
            self.logger.addHandler(file_handler)
    
        def log(self,msg):
            self.logger.error(msg)
    
    logger = AutoLogger('log_path',log_name)
    '''
    """
    创建日志文件时,引入log.py文件,当做一个模块使用,
    from log import logger
    return logger.log(msg="错误信息")
    """
    希望你眼眸有星辰,心中有山海,从此以梦为马,不负韶华
  • 相关阅读:
    公平锁,非公平锁,乐观锁,悲观锁
    需求分析
    需求的获取渠道
    php将中文字符串分割为数组
    面试题
    ecshop中错误
    应用上线前必须进行的10个QA测试
    资料1
    tp数据库配置
    Web开发思路
  • 原文地址:https://www.cnblogs.com/daviddd/p/12633737.html
Copyright © 2020-2023  润新知