单例模式介绍
一个类在整个系统运行期间,只允许存在一个实例,并提供全局访问点。应用的场景:
- 配置只能加载一次
- 日志对象不能创建多个
- 数据库连接池只需要一个
- Redis / MQ 客户端只要一个
- 全局状态管理器(限流、缓存等)
单例模式的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import threading
class Singleton: _instances = None _lock = threading.RLock()
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
def __new__(cls, *args, **kwargs): if not cls._instances: with cls._lock: if not cls._instances: cls._instances = super().__new__(cls) return cls._instances
|