a1 = A(2)
a2 = A(3)
3.使用类
class Singleton(object):
def init(self):
pass
@classmethod
def instance(cls, *args, **kwargs):
if not hasattr(Singleton, “_instance”):
Singleton._instance = Singleton(*args, **kwargs)
return Singleton._instance
一般情况,大家以为这样就完成了单例模式,但是这样当使用多线程时会存在问题
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
class Singleton(object):
def init(self):
pass
@classmethod
def instance(cls, *args, **kwargs):
if not hasattr(Singleton, “_instance”):
Singleton._instance = Singleton(*args, **kwargs)
return Singleton._instance
import threading
def task(arg):
obj = Singleton.instance()
print(obj)
for i in range(10):
t = threading.Thread(target=task,args=[i,])
t.start()
程序执行后,打印结果如下:
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
<main.Singleton object at 0x02C933D0>
看起来也没有问题,那是因为执行速度过快,如果在init方法中有一些IO操作,就会发现问题了,