欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python下線程之間的共享和釋放示例

 更新時間:2015年05月04日 10:50:19   投稿:goldensun  
這篇文章主要用示例簡單介紹了Python下線程之間的共享和釋放,線程一直是Python開發(fā)者中的熱點問題,需要的朋友可以參考下

最近被多線程給坑了下,沒意識到類變量在多線程下是共享的,還有一個就是沒意識到 內(nèi)存釋放問題,導(dǎo)致越累越大

1.python 類變量 在多線程情況 下的 是共享的

2.python 類變量 在多線程情況 下的 釋放是不完全的

3.python 類變量 在多線程情況 下沒釋放的那部分 內(nèi)存 是可以重復(fù)利用的

import threading
 import time
  
 class Test:
  
   cache = {}
    
   @classmethod
   def get_value(self, key):
     value = Test.cache.get(key, [])
     return len(value)
  
   @classmethod
   def store_value(self, key, value):
     if not Test.cache.has_key(key):
       Test.cache[key] = range(value)
     else:
       Test.cache[key].extend(range(value))
     return len(Test.cache[key])
  
   @classmethod
   def release_value(self, key):
     if Test.cache.has_key(key):
       Test.cache.pop(key)
     return True
  
   @classmethod
   def print_cache(self):
     print 'print_cache:'
     for key in Test.cache:
       print 'key: %d, value:%d' % (key, len(Test.cache[key]))
  
 def worker(number, value):
   key = number % 5
   print 'threading: %d, store_value: %d' % (number, Test.store_value(key, value))
   time.sleep(10)
   print 'threading: %d, release_value: %s' % (number, Test.release_value(key))
  
 if __name__ == '__main__':
   thread_num = 10
    
   thread_pool = []
   for i in range(thread_num):
     th = threading.Thread(target=worker,args=[i, 1000000])
     thread_pool.append(th)
     thread_pool[i].start()
  
   for thread in thread_pool:
     threading.Thread.join(thread)
    
   Test.print_cache()
   time.sleep(10)
    
   thread_pool = []
   for i in range(thread_num):
     th = threading.Thread(target=worker,args=[i, 100000])
     thread_pool.append(th)
     thread_pool[i].start()
  
   for thread in thread_pool:
     threading.Thread.join(thread)
    
   Test.print_cache()
   time.sleep(10)

總結(jié)

公用的數(shù)據(jù),除非是只讀的,不然不要當(dāng)類成員變量,一是會共享,二是不好釋放。

相關(guān)文章

  • Python向excel中寫入數(shù)據(jù)的方法

    Python向excel中寫入數(shù)據(jù)的方法

    這篇文章主要介紹了Python向excel中寫入數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Pip install和Conda install的使用

    Pip install和Conda install的使用

    本文主要介紹了Pip install和Conda install的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 基于Python實現(xiàn)敲擊木魚積累功德效果

    基于Python實現(xiàn)敲擊木魚積累功德效果

    最近大家都很流行用手機敲擊電子木魚積累功德,這在很多短視頻中也常常見到。本文將用Python語言實現(xiàn)這一效果,感興趣的小伙伴開業(yè)了解一下
    2022-11-11
  • 淺析NumPy 切片和索引

    淺析NumPy 切片和索引

    這篇文章主要介紹了NumPy 切片和索引的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)NumPy的相關(guān)知識,感興趣的朋友可以了解下。
    2020-09-09
  • Python實現(xiàn)二維數(shù)組輸出為圖片

    Python實現(xiàn)二維數(shù)組輸出為圖片

    下面小編就為大家分享一篇Python實現(xiàn)二維數(shù)組輸出為圖片,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python中TK窗口的創(chuàng)建方式

    Python中TK窗口的創(chuàng)建方式

    這篇文章主要介紹了Python中TK窗口的創(chuàng)建方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python遍歷指定文件及文件夾的方法

    Python遍歷指定文件及文件夾的方法

    這篇文章主要介紹了Python遍歷指定文件及文件夾的方法,對比兩種實現(xiàn)技巧分析了Python遍歷文件及文件夾的方法,需要的朋友可以參考下
    2015-05-05
  • Python的pytest測試框架中fixture的使用詳解

    Python的pytest測試框架中fixture的使用詳解

    這篇文章主要介紹了pytest中fixture的使用詳解,pytest是一個非常成熟的全功能的Python測試框架,能夠支持簡單的單元測試和復(fù)雜的功能測試,還可以用來做selenium/appnium等自動化測試、接口自動化測試,需要的朋友可以參考下
    2023-07-07
  • 簡單文件操作python 修改文件指定行的方法

    簡單文件操作python 修改文件指定行的方法

    使用python進行簡略的文件讀寫
    2013-05-05
  • Python while循環(huán)使用else語句代碼實例

    Python while循環(huán)使用else語句代碼實例

    這篇文章主要介紹了Python while循環(huán)使用else語句代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論