Python執行緒安全的單例模式
阿新 • • 發佈:2019-01-08
單例模式是指,該物件建立後,在其生命週期內記憶體中始終只有一個物件, 如果被再次呼叫時,還是返回該物件。
這樣做的好處是,可以節約記憶體,缺點是不可以根據不同的應用場景建立不同的物件。
多執行緒環境下,由於單例模式總是會去判斷 例項是否被建立,但是多個執行緒有可能會拿到相同的結果,這樣就無法實現單例模式了,因此遇到多執行緒的環境時,需要加鎖。
多執行緒單例模式:
# 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
這裡就變成了執行緒安全。因此可以實現多執行緒環境下,始終只有一個例項