Python线程安全的单例模式

单例模式是指,该对象创建后,在其生命周期内内存中始终只有一个对象, 如果被再次调用时,还是返回该对象。
这样做的好处是,可以节约内存,缺点是不可以根据不同的应用场景创建不同的对象。

多线程环境下,由于单例模式总是会去判断 实例是否被创建,但是多个线程有可能会拿到相同的结果,这样就无法实现单例模式了,因此遇到多线程的环境时,需要加锁。

多线程单例模式:

# coding:utf-8
import threading


def synchronized(func):

    func.__lock__ = threading.Lock()

    def lock_func(*args, **kwargs):
        with func.__lock__:
            return func(*args, **kwargs)
    return lock_func


class Singleton(object):
    """ 单例模式 """
    instance = None

    @synchronized
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = object.__new__(cls, *args, **kwargs)
        return cls.instance

加了锁之后,每个线程判断 if cls.instance is None 这里就变成了线程安全。因此可以实现多线程环境下,始终只有一个实例

    原文作者:lucky404
    原文地址: https://blog.csdn.net/lucky404/article/details/79668131
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞