zoukankan      html  css  js  c++  java
  • pyhon __new__单例2.py

    # class Singleton:
    #     _instance = None
    #
    #     def __init__(self):
    #         print("init")
    #
    #     @classmethod
    #     def get_instance(cls):
    #         if cls._instance is None:
    #             cls._instance =cls()
    #         return cls._instance
    #
    #
    # if __name__ == "__main__":
    #     a = Singleton.get_instance()
    #     b = Singleton.get_instance()
    #
    #     print(a is b)

    """
    运行结果
    init
    True
     这是一个实现方法,获取当前实例,但是可以正常实例化它,因此它不会成为单例对象。
    
    """
    
    # 使用__new__ 创建实例,在创建类实例的时候会调用此方法,此方法在__init__之前已经调用过。
    #
    # class Singleton:
    #     _instance =None
    #
    #     def __init__(self):
    #         print("init")
    #
    #     def __new__(cls, *args, **kwargs):
    #         if cls._instance is None:
    #             cls._instance = super().__new__(cls)
    #         return cls._instance
    #
    #
    # if __name__ == '__main__':
    #     a = Singleton()
    #     b = Singleton()
    #     print(a is b)  # True
    # 以上两种方式都不是线程安全 ,淫才十七称为线程安全,让我们LOCK y引入

    import threading
    import time
    class ThreadingSingleton:
    _instance =None
    _lock=threading.Lock()
    def __init__(self,name):
    time.sleep(3)
    self.name= name
    # print("init")
    def __new__(cls, *args, **kwargs):
    with cls._lock:
    if cls._instance is None:
    cls._instance =super().__new__(cls)
    return cls._instance
    def __str__(self):
    return str(self.name)

    if __name__ == '__main__':

    for i in range(10):
    # print("i", i)
    my = ThreadingSingleton(i)
    print(my)

    # 简单实用也安全实现线程模式,在初始化的时候 停止三秒 线程依然按照顺序执行,。

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

  • 相关阅读:
    C++ handle(句柄类) part2
    C++代理类的使用
    第一个blog
    C++ Handle(句柄) part1
    关于理想团队的构建和对软件流程的理解
    提供就医帮助的安卓APP
    上海地铁游移动APP需求分析
    关于学习了《构建之法》的若干存在疑惑的问题
    安卓APP开发简单实例 结对编程心得
    Vue修改Vue项目运行端口号(CLI2)
  • 原文地址:https://www.cnblogs.com/Xingtxx/p/12819447.html
Copyright © 2011-2022 走看看