import threading
import time
class Singleton:
instance = None
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs):
if cls.instance:
return cls.instance
time.sleep(0.1)
cls.instance = object.__new__(cls)
return cls.instance
def task():
obj = Singleton('x')
print(obj)
if __name__ == '__main__':
for i in range(10):
t = threading.Thread(target=task)
t.start()
<main.Singleton object at 0x0000021929B00AC0>
<main.Singleton object at 0x0000021929A67C40><main.Singleton object at 0x0000021929B0A9A0>
<main.Singleton object at 0x0000021929A66CA0>
<main.Singleton object at 0x0000021929AF0880><main.Singleton object at 0x0000021929B0A9A0>
<main.Singleton object at 0x0000021929A67C40>
<main.Singleton object at 0x000002192C8991F0>
<main.Singleton object at 0x000002192C8BFA60><main.Singleton object at 0x0000021929A3DC10>
Process finished with exit code 0
import threading
import time
class Singleton:
instance = None
lock = threading.RLock()
def __init__(self,name):
self.name = name
def __new__(cls,*args,**kwargs):
with cls.lock:
if cls.instance:
return cls.instance
time.sleep(0.1)
cls.instance = object.__new__(cls)
return cls.instance
def task():
obj = Singleton('x')
print(obj)
if __name__ == '__main__':
for i in range(10):
t = threading.Thread(target=task)
t.start()
<main.Singleton object at 0x000002AD30B81AC0><main.Singleton object at 0x000002AD30B81AC0>
<main.Singleton object at 0x000002AD30B81AC0><main.Singleton object at 0x000002AD30B81AC0>
<main.Singleton object at 0x000002AD30B81AC0>
<main.Singleton object at 0x000002AD30B81AC0>
<main.Singleton object at 0x000002AD30B81AC0><main.Singleton object at 0x000002AD30B81AC0><main.Singleton object at 0x000002AD30B81AC0><main.Singleton object at 0x000002AD30B81AC0>
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:
if cls.instance:
return cls.instance
time.sleep(0.1)
cls.instance = object.__new__(cls)
return cls.instance
def task():
obj = Singleton('x')
print(obj)
if __name__ == '__main__':
for i in range(10):
t = threading.Thread(target=task)
t.start()
data = Singleton('ssssssssss')
print(data)
<main.Singleton object at 0x00000157B600B4F0><main.Singleton object at 0x00000157B600B4F0>
<main.Singleton object at 0x00000157B600B4F0>
<main.Singleton object at 0x00000157B600B4F0><main.Singleton object at 0x00000157B600B4F0>
<main.Singleton object at 0x00000157B600B4F0>
<main.Singleton object at 0x00000157B600B4F0><main.Singleton object at 0x00000157B600B4F0>
<main.Singleton object at 0x00000157B600B4F0><main.Singleton object at 0x00000157B600B4F0>
<main.Singleton object at 0x00000157B600B4F0>
Process finished with exit code 0





































请添加图片描述


















