python 类变量在多线程下共享与释放问题

python 类变量在多线程下共享与释放问题,第1张

概述python 类变量在多线程下共享释放问题 对python这个高级语言感兴趣的小伙伴,下面一起跟随内存溢出 jb51.cc的小编两巴掌来看看吧!

最近被多线程给坑了下,没意识到类变量在多线程下是共享的,还有一个就是没意识到 内存释放问题,导致越累越大

1.python 类变量 在多线程情况 下的 是共享的

2.python 类变量 在多线程情况 下的 释放是不完全的

3.python 类变量 在多线程情况 下没释放的那部分 内存 是可以重复利用的

# @param python 类变量 在多线程下的共享与释放问题# @author 内存溢出 jb51.cc|www.jb51.cc 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,100000])         thread_pool.append(th)         thread_pool[i].start()       for thread in thread_pool:         threading.Thread.join(thread)           Test.print_cache()     time.sleep(10)# End www.jb51.cc

总结

公用的数据,除非是只读的,不然不要当类成员变量,一是会共享,二是不好释放。

总结

以上是内存溢出为你收集整理的python 类变量在多线程下共享与释放问题全部内容,希望文章能够帮你解决python 类变量在多线程下共享与释放问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1199948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存