Python测试单例模式

单例模式的核心思想

单例模式确保一个类只有一个实例,并提供一个全局访问点。这在需要控制资源访问(如配置文件、数据库连接等)时非常有用。

一个简单的示例:

python 复制代码
import threading
import time


class Singleton:
    instance = None
    lock = threading.RLock()  # 加锁(递归锁)防止并发创建新对象

    def __init__(self, name):
        self.name = name

    def __new__(cls, *args, **kwargs):
        if cls.instance:
            return cls.instance
        # 加锁
        with cls.lock:
            time.sleep(0.5)
            if cls.instance:
                return cls.instance
            cls.instance = object.__new__(cls)  # 创建空对象
            return cls.instance


# obj1 = Singleton('obj1')
# print(obj1)
# obj2 = Singleton('obj2')
# print(obj2)

def task():
    obj = Singleton('x')
    print(obj)


for i in range(10):
    t = threading.Thread(target=task)
    t.start()

"""
输出:
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>
<__main__.Singleton object at 0x0000024AFD72C090>

"""
相关推荐
刀法如飞17 分钟前
开箱即用的 DDD(领域驱动设计)工程脚手架,基于 Spring Boot 4.0.1 和 Java 21
java·spring boot·mysql·spring·设计模式·intellij-idea
cnxy1881 小时前
Python爬虫进阶:反爬虫策略与Selenium自动化完整指南
爬虫·python·selenium
用户8356290780512 小时前
Python 实现 Excel 条件格式自动化
后端·python
深蓝电商API2 小时前
Scrapy管道Pipeline深度解析:多方式数据持久化
爬虫·python·scrapy
噎住佩奇3 小时前
(Win11系统)搭建Python爬虫环境
爬虫·python
basketball6163 小时前
python 的对象序列化
开发语言·python
rgeshfgreh3 小时前
Python流程控制:从条件到循环实战
前端·数据库·python
luoluoal3 小时前
基于python大数据的电影市场预测分析(源码+文档)
python·mysql·django·毕业设计·源码
幻云20103 小时前
Python深度学习:从入门到实战
人工智能·python
GISer_Jing4 小时前
AI Agent 人类参与HITL与知识检索RAG
人工智能·设计模式·aigc