最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用functools實(shí)現(xiàn)注解同步方法

 更新時(shí)間:2018年02月06日 09:42:45   作者:kongxx  
這篇文章主要介紹了Python使用functools實(shí)現(xiàn)注解同步方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

在 Python 中沒(méi)有類(lèi)似 Java 中使用的 synchronized 關(guān)鍵字來(lái)同步方法,因此在 Python 中要實(shí)現(xiàn)同步方法,通常我們是使用 threading.Lock() 來(lái)實(shí)現(xiàn)。在進(jìn)入函數(shù)的地方獲取鎖,出函數(shù)的時(shí)候釋放鎖,這樣實(shí)現(xiàn)代碼看起好非常不好看。另外網(wǎng)上也有人給出了其它幾種實(shí)現(xiàn)方式,但看起來(lái)都不美氣。

今天我在做項(xiàng)目的時(shí)候突然想到是不是可以通過(guò) functools 來(lái)實(shí)現(xiàn)通過(guò)注解來(lái)標(biāo)注方法為同步方法。

首先要求自己的類(lèi)中有一個(gè)鎖對(duì)象并且在類(lèi)初始化的時(shí)候初始化這個(gè)鎖對(duì)象,比如:

class MyWorker(object):
  def __init__(self):
    self.lock = threading.Lock()
    ...
  ...

然后創(chuàng)建一個(gè) synchronized 函數(shù),這個(gè)函數(shù)裝飾具體對(duì)象的具體方法,將方法放到獲取/釋放鎖之間來(lái)運(yùn)行,如下

def synchronized(func):
  @functools.wraps(func)
  def wrapper(self, *args, **kwargs):
    with self.lock:
      return func(self, *args, **kwargs)
  return wrapper

最后在需要使用同步的方法上使用 @synchronized 來(lái)標(biāo)準(zhǔn)方法是同步方法,比如:

@synchronized
def test(self):
  ...

下面是一個(gè)完整例子,僅供參考:

import threading
import functools
import time
def synchronized(func):
  @functools.wraps(func)
  def wrapper(self, *args, **kwargs):
    with self.lock:
      return func(self, *args, **kwargs)
  return wrapper
class MyWorker(object):
  def __init__(self):
    self.lock = threading.Lock()
    self.idx = 0
  @synchronized
  def test1(self):
    for i in range(1, 11):
      self.idx = self.idx + 1
      print "Test1: " + str(self.idx)
      time.sleep(1)
  @synchronized
  def test2(self):
    for i in range(1, 11):
      self.idx = self.idx + 1
      print "Test2: " + str(self.idx)
      time.sleep(1)
  @synchronized
  def test3(self):
    for i in range(1, 11):
      self.idx = self.idx + 1
      print "Test3: " + str(self.idx)
      time.sleep(1)
worker = MyWorker()
threading.Thread(target=worker.test1).start()
threading.Thread(target=worker.test2).start()
threading.Thread(target=worker.test3).start()

總結(jié)

以上所述是小編給大家介紹的Python使用functools實(shí)現(xiàn)注解同步方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 一文學(xué)會(huì)利用python解決文章付費(fèi)限制問(wèn)題

    一文學(xué)會(huì)利用python解決文章付費(fèi)限制問(wèn)題

    本篇文章主要介紹利用Python爬蟲(chóng)爬取付費(fèi)文章,適合練習(xí)爬蟲(chóng)基礎(chǔ)同學(xué),文中描述和代碼示例很詳細(xì),干貨滿滿,感興趣的小伙伴快來(lái)一起學(xué)習(xí)吧
    2023-05-05
  • 通過(guò)python爬蟲(chóng)賺錢(qián)的方法

    通過(guò)python爬蟲(chóng)賺錢(qián)的方法

    在本篇文章里小編給大家分享了關(guān)于通過(guò)python爬蟲(chóng)賺錢(qián)的方法,有興趣的朋友們學(xué)習(xí)下。
    2019-01-01
  • Python統(tǒng)計(jì)可散列的對(duì)象之容器Counter詳解

    Python統(tǒng)計(jì)可散列的對(duì)象之容器Counter詳解

    Counter是一個(gè)容器,可以跟蹤等效值增加的次數(shù).這個(gè)類(lèi)可以用來(lái)實(shí)現(xiàn)其他語(yǔ)言中常用包或多集合數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的算法.本篇文章非常詳細(xì)的介紹了容器Counter的使用方式,需要的朋友可以參考下
    2021-05-05
  • Python 如何利用pandas 和 matplotlib繪制柱狀圖

    Python 如何利用pandas 和 matplotlib繪制柱狀圖

    Python 中的 pandas 和 matplotlib 庫(kù)提供了豐富的功能,可以幫助你輕松地繪制各種類(lèi)型的圖表,本文將介紹如何使用這兩個(gè)庫(kù),繪制一個(gè)店鋪銷(xiāo)售數(shù)量的柱狀圖,并添加各種元素,如數(shù)據(jù)標(biāo)簽、圖例、網(wǎng)格線等,感興趣的朋友一起看看吧
    2023-10-10
  • python制作企業(yè)郵箱的爆破腳本

    python制作企業(yè)郵箱的爆破腳本

    這篇文章主要介紹了python制作企業(yè)郵箱的爆破腳本的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Python中字典常用操作的示例詳解

    Python中字典常用操作的示例詳解

    字典是Python必用且常用的數(shù)據(jù)結(jié)構(gòu),本文主要為大家梳理了一下常用的字典操作:初始化、合并字典、字典轉(zhuǎn)Pandas等,需要的可以參考一下
    2022-05-05
  • python對(duì)raw格式照片進(jìn)行降噪處理的方法詳解

    python對(duì)raw格式照片進(jìn)行降噪處理的方法詳解

    要對(duì)RAW格式的照片進(jìn)行降噪,我們可以使用rawpy庫(kù)來(lái)讀取RAW圖像,并使用imageio庫(kù)將處理后的圖像保存為其他格式,如PNG或JPEG,本文將詳細(xì)給大家介紹python如何對(duì)raw格式照片進(jìn)行降噪處理,文中有詳細(xì)的代碼流程,需要的朋友可以參考下
    2023-05-05
  • jupyter安裝小結(jié)

    jupyter安裝小結(jié)

    jupyter (之前的 ipython notebook )于我的最大意義在于,讓學(xué)習(xí)進(jìn)程和探索進(jìn)程變得可累積,正如它的原先名字中的 notebook 所暗示的那樣,作為學(xué)習(xí)的記錄者,方便你隨時(shí)撿起學(xué)習(xí)的進(jìn)度,增量式地前進(jìn)
    2016-03-03
  • 五個(gè)簡(jiǎn)單有效的Python清理數(shù)據(jù)腳本分享

    五個(gè)簡(jiǎn)單有效的Python清理數(shù)據(jù)腳本分享

    通常情況下,在機(jī)器學(xué)習(xí)中的數(shù)據(jù)清理往往是一件令人頭疼的事情,本文整理了一份清單,列出了5個(gè)常用的Python腳本,用于自動(dòng)化數(shù)據(jù)清理,需要的可以參考一下
    2022-09-09
  • 淺談python中np.array的shape( ,)與( ,1)的區(qū)別

    淺談python中np.array的shape( ,)與( ,1)的區(qū)別

    今天小編就為大家分享一篇python中np.array的shape ( ,)與( ,1)的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

文安县| 凤台县| 项城市| 兴宁市| 肥西县| 广宁县| 乐业县| 嘉义市| 平陆县| 本溪市| 本溪市| 三亚市| 本溪市| 徐闻县| 龙陵县| 永德县| 刚察县| 上饶市| 兴安盟| 富川| 嘉峪关市| 盖州市| 揭阳市| 泽州县| 寻乌县| 潮安县| 阳春市| 彭州市| 淮安市| 赤水市| 乌兰察布市| 靖西县| 富顺县| 临安市| 乌鲁木齐市| 灵川县| 兴城市| 叶城县| 吉木萨尔县| 中阳县| 南宫市|