python中单例模式

python 复制代码
import threading





class Singleton(type):
    _instances = {}
    _instance_lock = threading.Lock()
    con = threading.Condition(_instance_lock)

    def __call__(cls, *args, **kwargs):
        key = '&&'.join([str(i) for i in args])
        if key not in cls._instances:
            if cls._instance_lock.locked():
                cls.con.wait()
            cls._instance_lock.acquire()
            cls._instances[key] = super(Singleton, cls).__call__(*args, **kwargs)
            cls._instance_lock.release()
            return cls._instances[key]
            
        else:
            return cls._instances[key]



class MyClass(metaclass=Singleton):
    
    def __init__(self,username):
        print(username)
        self.username = username
        
    def get_username(self):
        return self.username
    
a1 = MyClass("test")
print(a1.get_username())
a2 = MyClass("test")
print(a1.get_username())
    

debug可以发现,MyClass只实例化了一次

https://stackoverflow.com/questions/6760685/what-is-the-best-way-of-implementing-singleton-in-python

相关推荐
Jay_Franklin6 分钟前
SRIM通过python计算dap
开发语言·python
是一个Bug14 分钟前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟16 分钟前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
吴佳浩28 分钟前
Python入门指南(七) - YOLO检测API进阶实战
人工智能·后端·python
消失的旧时光-194330 分钟前
401 自动刷新 Token 的完整架构设计(Dio 实战版)
开发语言·前端·javascript
wadesir34 分钟前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
tap.AI35 分钟前
RAG系列(二)数据准备与向量索引
开发语言·人工智能
阿蒙Amon1 小时前
C#每日面试题-重写和重载的区别
开发语言·c#
是一个Bug1 小时前
Java基础20道经典面试题(二)
java·开发语言
Z_Easen1 小时前
Spring 之元编程
java·开发语言