标签

#设计模式

1 篇文章

api-开发fastapigcpgithubk8smcpnginxopenairag上下文医学向量对话代码流式爬虫环境配置
Python 开发
13 分钟

单例模式-介绍

这篇笔记以 Python 中的单例模式为对象,说明“一个类在程序运行期间只创建一个全局共享实例”的适用场景,包括配置管理、日志器、数据库连接池、线程池、缓存和 RedisClient 等需要复用状态或资源的对象。内容先对比懒汉式与饿汉式:前者在第一次使用时通过 `__new__` 创建实例,节省资源但在多线程并发判断 `_instance is None` 时可能产生多个对象;后者在模块加载时提前创建,写法简单且天然线程安全,但可能带来不必要的启动资源占用。针对懒汉式的并发问题,文章给出基于 `threading.Lock` 的双重检查锁实现,用外层判断减少加锁开销,用锁内二次判断避免多个线程排队后重复初始化。随后还展示了装饰器封装单例的函数式写法,并提醒其存在首次参数不可重设、默认线程不安全、只在进程内生效等边界。更 Pythonic 的方案是直接利用模块作为单例:`import` 会通过 `sys.modules` 缓存模块对象,使配置、全局状态或缓存变量在多个引用方之间共享。最后补充了 `threading.Lock` 的 acquire、release 和 `with lock` 用法,以及死锁、加锁粒度过大、共享状态污染和测试耦合等风险,适合正在学习 Python 设计模式和多线程资源保护的开发者。

设计模式