|
1
9
我建议您选择一个更好的单例实现。这个 metaclass-based implementation 是最常用的。 至于线程安全,您的方法和上面链接中建议的任何方法都不是线程安全的:线程总是有可能读取到没有现有实例并开始创建实例,但是 another thread does the same 在存储第一个实例之前。
您可以使用
decorator suggested in this answer
为了保护
|
|
2
2
如果您关心性能,可以使用 check-lock-check pattern 要最小化锁定采集:
区别在于:
|
|
|
3
0
我发布这个只是为了简化@oliviermelan在和@se7entyse7en上提出的解决方案:没有开销
lock=threading.lock()。 类singletOnOptmizedOptmized(类型): _实例= DEF 呼叫 (cls,*args,**kwargs): 如果cls不在cls.\u实例中: 带锁: 如果cls不在cls.\u实例中: cls._instances[cls]=super(singletonOptmizedOptmized,cls)。 呼叫 (*args,**kwargs) 返回cls.\u实例[cls] 类singletonClassoptmizedOptmized(元类=singletonOptmizedOptmized): 通过 差异: >>> timeit('SingletonClass()', globals=globals(), number=1000000)
0.4635776
>>> timeit('SingletonClassOptmizedOptmized()', globals=globals(), number=1000000)
0.192263300000036
|
|
|
S qasem · Android内存性能 8 年前 |
|
|
R83nLK82 · 在单例设计模式上引发IOException 8 年前 |
|
|
hal · 两个课程有什么区别?他们的工作方式不同吗? 8 年前 |
|
Jaquarh · 如何在不使用DI的情况下实例化父类 8 年前 |
|
|
Deepanshu · 基于PHP的Web应用程序中的单例对象状态 8 年前 |
|
|
dicle · 视图控制器中的依赖项注入 8 年前 |
|
|
Kozuki · 如何在生产代码中考虑单例? 8 年前 |