真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python怎么實現(xiàn)線程安全的單例模式-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關(guān)python怎么實現(xiàn)線程安全的單例模式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供海棠企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站制作、HTML5、小程序制作等業(yè)務(wù)。10年已為海棠眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。

單例模式是一種常見的設(shè)計模式,該模式的主要目的是確保某一個類只有一個實例存在。當(dāng)你希望在整個系統(tǒng)中,某個類只能出現(xiàn)一個實例時,單例對象就能派上用場。

比如,服務(wù)器的配置信息寫在一個文件中online.conf中,客戶端通過一個 Config 的類來讀取配置文件的內(nèi)容。如果在程序運行期間,有很多地方都需要使用配置文件的內(nèi)容,那么每個調(diào)用配置文件的地方都會創(chuàng)建 Config的實例,這就導(dǎo)致系統(tǒng)中存在多個Config 的實例對象,在配置文件內(nèi)容很多的情況下,我們就浪費了大量的內(nèi)存做了同樣的事。事實上,對于Config類我們在程序運行期間時只需要一個實例對象即可,這時單例模式就是最好的選擇。

python的模塊就是天然的單例模式,這里我們使用修飾器來實現(xiàn)單例模式,以下是代碼實現(xiàn)

def Singleton(cls):
 instances = {}

 def get_instance(*args, **kw):
  if cls not in instances:
   instances[cls] = cls(*args, **kw)
  return instances[cls]

 return get_instance

代碼也很簡單,將類傳入單例修飾器中,如果該類還未生成實例(instances中不存在該類),那么就生成一個新的實例返回,并記錄在instances中。如果已經(jīng)instances中已經(jīng)存在該類,那么直接返回實例instances[cls]。

那么這段代碼是完美的嗎?答案是否定的,這段代碼不是線程安全的。要實現(xiàn)線程安全需要配合鎖的使用,只有占有鎖的線程才能繼續(xù)訪問單例實例,看來我們需要再寫一個修飾器來實現(xiàn)線程安全了,以下是完整的代碼實現(xiàn)和簡單的多線程測試用例。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import threading

def synchronized(func):
 func.__lock__ = threading.Lock()

 def synced_func(*args, **kws):
  with func.__lock__:
   return func(*args, **kws)

 return synced_func

def Singleton(cls):
 instances = {}

 @synchronized
 def get_instance(*args, **kw):
  if cls not in instances:
   instances[cls] = cls(*args, **kw)
  return instances[cls]

 return get_instance

def worker():
 single_test = test()
 print "id----> %s" % id(single_test)

@Singleton
class test():
 a = 1
if __name__ == "__main__":
 task_list = []
 for one in range(30):
  t = threading.Thread(target=worker)
  task_list.append(t)
 for one in task_list:
  one.start()
 for one in task_list:
  one.join()

關(guān)于“python怎么實現(xiàn)線程安全的單例模式”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


新聞名稱:python怎么實現(xiàn)線程安全的單例模式-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/doiooj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部