在 Python 中,可以使用 threading.Lock
来保证单例模式的线程安全。以下是一个示例代码:
import threading
class Singleton(object):
_instance_lock = threading.Lock()
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
with cls._instance_lock:
if not hasattr(cls, "_instance"):
# 配置类
impl = cls.configure() if hasattr(cls, "configure") else cls
# 创建单例实例
instance = super(Singleton, cls).__new__(impl, *args, **kwargs)
if not isinstance(instance, cls):
instance.__init__(*args, **kwargs)
cls._instance = instance
return cls._instance
在上述代码中,首先在 Singleton
类中定义了一个 Lock
类型的属性 _instance_lock
,用于处理线程同步问题。然后在 __new__
方法中,使用 with
语句来获取 _instance_lock
的锁。这样可以保证在多个线程同时创建单例实例时,只有一个线程会成功,其他线程会等待锁的释放。最后,通过判断类属性 _instance
是否存在,来确定是否已经创建了单例实例。如果不存在,则执行单例实例的创建过程,并将创建的实例存储在 _instance
中,以便后续的调用可以直接返回该实例。