|
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
|
|
|
Cam · Pandas列表日期到日期时间 1 年前 |
|
|
LMC · Numpy数组布尔索引以获取包含元素 1 年前 |
|
|
vr8ce · 非成对标记中特定字符的正则表达式 1 年前 |
|
|
ShaAnder · 为什么sqllachemy返回的是类而不是字符串 1 年前 |
|
|
Pernoctador · Python映射可以复制吗?我需要参考地图 1 年前 |