使用單例模式只載入一次模型

2021-10-10 14:55:43 字數 1137 閱讀 4667

模型**時使用單例模式避免重複載入

def singleton(cls):

# 單下劃線的作用是這個變數只能在當前模組裡訪問,僅僅是一種提示作用

# 建立乙個字典用來儲存類的例項物件

_instance = {}

def _singleton(*args, **kwargs):

# 先判斷這個類有沒有物件

if cls not in _instance:

_instance[cls] = cls(*args, **kwargs) # 建立乙個物件,並儲存到字典當中

# 將例項物件返回

return _instance[cls]

return _singleton

@singleton

class loadmodel:

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

config = configparser()

config.read('../config/config.ini')

config_path = config['default']

model = bertforsequenceclassification.from_pretrained(

'../bert_pretrain/', # 使用 12-layer 的 bert 模型.

config=os.path.join(config_path['bert_pretrain_path'], 'bert_config.json'),

num_labels=5, # 多分類任務的輸出標籤為 5個.

output_attentions=false, # 不返回 attentions weights.

output_hidden_states=false, # 不返回 all hidden-states.

)model.load_state_dict(torch.load(os.path.join(config_path['classifier_model_path'], 'pytorch_model.bin')))

model.cuda()

model.eval()

return config_path, model

單例模式 只執行一次初始化

new 方法是構建物件的方法,init 方法是初始化物件的方法。概念 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,單例模式是一種物件建立型模式。目的 單個程序中只存在乙個類的例項,從而實現資料共享,節省系統開銷,防止io阻塞 方法1 使用模組建立單例 檔案ca...

php單例模式實現物件只被建立一次

這是我在php面試題中遇到的一道試題,單例模式按字面來看就是某乙個類只有乙個例項,這樣做的好處還是很大的,比如說資料庫的連線,我們只需要例項化一次,不需要每次都去new了,這樣極大的降低了資源的耗費。單例類至少擁有以下三種公共元素 必須擁有乙個建構函式,並且必須被標記為private。擁有乙個儲存類...

Fragment懶載入(只載入一次)

public abstract class basefragment extends fragment 檢視是否已經對使用者可見,系統的方法 override public void setuservisiblehint boolean isvisibletouser private void is...