当前位置: 首页 > news >正文

面试-python单例模式实现

概念:
一个对象只能最多存在一个实例

优点:
节省资源空间

缺点:
多线程失效,需要加锁解决

两种实现方式:

需要用到的知识点
1.单例模式思想

2.装饰器

3.类对象
4.__new__方法

4.with语句
5.多线程资源竞争使单例模式失效,导致脏读,使用锁解决

# 方式1:装饰器实现 非线程安全
def singleton(cls):_instances = {}def wrapper(*args, **kwargs):if cls not in _instances:_instances[cls] = cls(*args, **kwargs)return _instances[cls]return wrapper
@singleton
class ConfigManager:def __init__(self):self.settings = {}
# 方式1:装饰器实现 线程安全
import threading
def singleton(cls):__instances = {}__lock = threading.Lock()def wrapper(*args, **kwargs):with __lock:if cls not in _instances:_instances[cls] = cls(*args, **kwargs)return _instances[cls]return wrapper@singleton
class ConfigManager:def __init__(self):self.settings = {}
# 方式2:__new__方法重写    重点++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class CacheManager:_instance = Nonedef __new__(cls):if not cls._instance:cls._instance = super().__new__(cls)cls._instance._cache = {}return cls._instance
# 方式2:线程安全版(带锁)
from threading import Lockclass ThreadSafeSingleton:_instance = None_lock = Lock()def __new__(cls):if not cls._instance:with cls._lock:if not cls._instance:cls._instance = super().__new__(cls)return cls._instance

方式3:
所有模块导入的类也是默认单例

http://www.lryc.cn/news/608293.html

相关文章:

  • 谈谈WebAssembly、PWA、Web Workers的作用和场景
  • 【机器学习】两大线性分类算法:逻辑回归与线性判别分析:找到分界线的艺术
  • uniapp倒计时计算
  • InfluxDB 与 Node.js 框架:Express 集成方案(一)
  • Oracle 11g RAC集群部署手册(一)
  • 电力系统分析学习笔记
  • Angular初学者入门第一课——搭建并改造项目(精品)
  • 学习笔记:无锁队列的原理以及c++实现
  • 基于Dockerfile 部署一个 Flask 应用
  • Orange的运维学习日记--25.Linux文件系统基本管理
  • 【BTC】挖矿
  • 优选算法 力扣1089.复写零 双指针 原地修改 C++解题思路 每日一题
  • Git 的基本使用指南(1)
  • Arpg第二章——流程逻辑
  • 自动驾驶中的传感器技术15——Camera(6)
  • 数字化转型驱动中小制造企业的质量管理升级
  • TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》
  • 【深度学习②】| DNN篇
  • 编译器与解释器:核心原理与工程实践
  • 基于Postman进行http的请求和响应
  • 操作系统:远程过程调用( Remote Procedure Call,RPC)
  • Jupyter notebook如何显示行号?
  • SQL Server从入门到项目实践(超值版)读书笔记 22
  • Spring事务失效场景
  • kotlin小记(1)
  • 集合框架(重点)
  • linux ext4缩容home,扩容根目录
  • 网络安全基础知识【6】
  • Ext系列文件系统
  • 【软考中级网络工程师】知识点之级联