一言不和就飚代码,欢迎来黑。
加锁是为了防止多线程下出现创建多个实例的情况。下面代码分别单利模式,和防止二次初始化的代码。下面的上锁采取上下文管理器的话,更优雅。
# -*-coding:utf-8-*-
# AUTHOR:tyltr
# TIME :2018/10/18
import threading
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
_instance_lock = threading.Lock()
_instance_lock.acquire()
if not hasattr(cls, "_instance"):
Singleton._instance = super(Singleton, cls).__new__(cls)
_instance_lock.release()
return Singleton._instance
def __init__(self,n,*args, **kwargs):
if not hasattr(self,"init"):
_init_lock = threading.Lock()
_init_lock.acquire()
if not hasattr(self, "init"):
print()
self.init = True
self.other_params = n
_init_lock.release()
if __name__ == '__main__':
s=Singleton(1)
s2=Singleton(4)
print(id(s))
print(id(s2))
print(s.other_params)