Python单例模式实现,使用100个线程实例完成实例测试

Python实现单例模式,并且启动100个线程进行测试

import threading
import time

class Singleton(object):
    __lock = threading.Lock()
    __instance = None          # 单例对象,必须是类属性
    def __init__(self):
        pass

    def __new__(cls, *args, **kwargs):
        # 如果实例存在直接返回
        if Singleton.__instance:
            return Singleton.__instance

        # 如果实例不存在,申请锁,只有获得了锁,才能创建实例
        if Singleton.__lock.acquire():
            if Singleton.__instance == None:  # 只有对象没有年被创建,才创建
                Singleton.__instance = object.__new__(cls)
                pass
            Singleton.__lock.release() # 释放锁
            pass
        return Singleton.__instance    # 返回实例
        pass
    pass


# 测试用线程
class TestThread(threading.Thread):
    def __init__(self, name):
        super().__init__()
        self.__name = name
        pass
    def run(self):
        s = None
        while True:
            # time.sleep(1)
            s = Singleton()  # 创建实例
            print(s)
        pass
    pass

if __name__ == "__main__":
    # 100个线程 无限创建实例
    for i in range(100):
        t = TestThread('thread-' + str(i))
        t.start()
        pass
    pass

测试结果,所有线程得到的都是同一个实例

thread-52 : <main.Singleton object at 0x000001960A7E24A8>
thread-67 : <main.Singleton object at 0x000001960A7E24A8>
thread-52 : <main.Singleton object at 0x000001960A7E24A8>
thread-52 : <main.Singleton object at 0x000001960A7E24A8>
thread-70 : <main.Singleton object at 0x000001960A7E24A8>
thread-67 : <main.Singleton object at 0x000001960A7E24A8>
thread-40 : <main.Singleton object at 0x000001960A7E24A8>
thread-47 : <main.Singleton object at 0x000001960A7E24A8>
thread-52 : <main.Singleton object at 0x000001960A7E24A8>
thread-15 : <main.Singleton object at 0x000001960A7E24A8>
thread-17 : <main.Singleton object at 0x000001960A7E24A8>
thread-47 : <main.Singleton object at 0x000001960A7E24A8>
thread-5 : <main.Singleton object at 0x000001960A7E24A8>
thread-87 : <main.Singleton object at 0x000001960A7E24A8>
thread-17 : <main.Singleton object at 0x000001960A7E24A8>
thread-69 : <main.Singleton object at 0x000001960A7E24A8>
thread-62 : <main.Singleton object at 0x000001960A7E24A8>
thread-87 : <main.Singleton object at 0x000001960A7E24A8>
thread-75 : <main.Singleton object at 0x000001960A7E24A8>
thread-84 : <main.Singleton object at 0x000001960A7E24A8>
thread-52 : <main.Singleton object at 0x000001960A7E24A8>
thread-7 : <main.Singleton object at 0x000001960A7E24A8>
thread-56 : <main.Singleton object at 0x000001960A7E24A8>
thread-84 : <main.Singleton object at 0x000001960A7E24A8>
thread-44 : <main.Singleton object at 0x000001960A7E24A8>
thread-0 : <main.Singleton object at 0x000001960A7E24A8>
thread-33 : <main.Singleton object at 0x000001960A7E24A8>
thread-47 : <main.Singleton object at 0x000001960A7E24A8>
thread-56 : <main.Singleton object at 0x000001960A7E24A8>
thread-70 : <main.Singleton object at 0x000001960A7E24A8>
thread-51 : <main.Singleton object at 0x000001960A7E24A8>
thread-56 : <main.Singleton object at 0x000001960A7E24A8>
thread-99 : <main.Singleton object at 0x000001960A7E24A8>
thread-37 : <main.Singleton object at 0x000001960A7E24A8>
thread-17 : <main.Singleton object at 0x000001960A7E24A8>
thread-14 : <main.Singleton object at 0x000001960A7E24A8>
thread-37 : <main.Singleton object at 0x000001960A7E24A8>
thread-79 : <main.Singleton object at 0x000001960A7E24A8>
thread-28 : <main.Singleton object at 0x000001960A7E24A8>
thread-69 : <main.Singleton object at 0x000001960A7E24A8>
thread-41 : <main.Singleton object at 0x000001960A7E24A8>
thread-28 : <main.Singleton object at 0x000001960A7E24A8>
thread-41 : <main.Singleton object at 0x000001960A7E24A8>
thread-38 : <main.Singleton object at 0x000001960A7E24A8>
thread-74 : <main.Singleton object at 0x000001960A7E24A8>
thread-52 : <main.Singleton object at 0x000001960A7E24A8>
thread-41 : <main.Singleton object at 0x000001960A7E24A8>
thread-46 : <main.Singleton object at 0x000001960A7E24A8>
thread-74 : <main.Singleton object at 0x000001960A7E24A8>
thread-30 : <main.Singleton object at 0x000001960A7E24A8>
thread-97 : <main.Singleton object at 0x000001960A7E24A8>
thread-7 : <main.Singleton object at 0x000001960A7E24A8>
thread-36 : <main.Singleton object at 0x000001960A7E24A8>
thread-84 : <main.Singleton object at 0x000001960A7E24A8>
thread-82 : <main.Singleton object at 0x000001960A7E24A8>
thread-67 : <main.Singleton object at 0x000001960A7E24A8>
thread-26 : <main.Singleton object at 0x000001960A7E24A8>
thread-13 : <main.Singleton object at 0x000001960A7E24A8>
thread-44 : <main.Singleton object at 0x000001960A7E24A8>
thread-83 : <main.Singleton object at 0x000001960A7E24A8>
thread-13 : <main.Singleton object at 0x000001960A7E24A8>
thread-93 : <main.Singleton object at 0x000001960A7E24A8>
thread-47 : <main.Singleton object at 0x000001960A7E24A8>

发布了34 篇原创文章 · 获赞 54 · 访问量 5032

猜你喜欢

转载自blog.csdn.net/nosprings/article/details/100120325
今日推荐