django,flask源码对于单例模式的使用方式

# 常见面试版本
1
import threading 2 import time 3 4 5 class Singleton(object): 6 _instance = None 7 lock = threading.RLock() 8 9 def __init__(self, name): 10 self.name = name 11 12 # 不加锁出现问题版本 13 # def __new__(cls, *args, **kwargs): 14 # if not cls._instance: 15 # time.sleep(0.2) # 这里会引发问题,每一个执行之后没有立刻改cls._instance, 16 # # 先一个进来发现还是为空,立即设置自己的__instance,于是极大可能单例出现问题 17 # cls._instance = object.__new__(cls) 18 19 # 加锁解决问题版本 20 def __new__(cls, *args, **kwargs): 21 with cls.lock: # 下面可能存在问题的解决方法,必须使用,计时加上时间的延迟也没有影响 22 if not cls._instance: 23 time.sleep(0.2) # 加锁之后会等待,不再影响 24 cls._instance = object.__new__(cls) 25 26 return cls._instance
# 主流源码采用方法

# 为什么使用单例模式,为了在一个程序执行的生命周期里面不在重复的生成相同的资源,这回带来额外的不必要的消耗,比如配置文件没有相同的资源没必要重复加载

# 现有settings.py 文件,a.py,b.py文件,a.py会调用b.py文件的实例,a.py文件制执行部分会加载settings配置文件,b.py同样会加载,两者都导入setting文件,但是两者的导入的settings只会加载一次,也就是先加载的settings.py

# 未完,之后补充源码

 

posted @ 2020-09-13 04:45  以武止戈  阅读(107)  评论(0)    收藏  举报
HTML5鼠标控制树镜动画特效