29 lines
580 B
Python
29 lines
580 B
Python
# -*- coding: utf-8 -*-
|
|
from threading import RLock
|
|
single_lock = RLock()
|
|
|
|
def Singleton(cls):
|
|
instance = {}
|
|
|
|
def _singleton_wrapper(*args, **kargs):
|
|
with single_lock:
|
|
if cls not in instance:
|
|
instance[cls] = cls(*args, **kargs)
|
|
return instance[cls]
|
|
|
|
return _singleton_wrapper
|
|
|
|
|
|
@Singleton
|
|
class SingletonTest(object):
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
|
|
slt_1 = SingletonTest('第1次创建')
|
|
print(slt_1.name)
|
|
slt_2 = SingletonTest('第2次创建')
|
|
print(slt_1.name, slt_2.name)
|
|
|
|
print(slt_1 is slt_2)
|