使用單例模式加速

2021-09-27 09:18:28 字數 934 閱讀 2358

from ... import ...

相當於乙個單例模式,模組第一次匯入後會生成.pyc檔案

第二次匯入時,就會直接載入.pyc檔案

基於__new__方法實現

當我們實現單例時,為了保證執行緒安全需要在內部加入鎖

我們知道,當我們例項化乙個物件時,是先執行了類的__new__方法(我們沒寫時,預設呼叫object.__new__),例項化物件;然後再執行類的__init__方法,對這個物件進行初始化,所有我們可以基於這個,實現單例模式

import threading

class singleton(object):

_instance_lock = threading.lock()

def __init__(self):

pass

def __new__(cls, *args, **kwargs):

if not hasattr(singleton, "_instance"):

with singleton._instance_lock:

if not hasattr(singleton, "_instance"):

singleton._instance = object.__new__(cls)

return singleton._instance

obj1 = singleton()

obj2 = singleton()

print(obj1,obj2)

def task(arg):

obj = singleton()

print(obj)

for i in range(10):

t = threading.thread(target=task,args=[i,])

t.start()

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

C 單例模式使用

一直以來都沒有細細的看過設計模式,今天借助部落格來記錄一下學習過程。單例模式,是這些設計模式中最常用的一種模式,之前我們可能使用過全域性或者靜態變數的方式,現在可以考慮單例模式了。單例模式主要是在一些工具類使用較多,因為工具類基本不用儲存太多的跟自身有關的資料,這種情況下,如果每次都new乙個物件,...