Python下线程之间的共享和释放示例


Posted in Python onMay 04, 2015

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

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

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

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

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)

总结

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

Python 相关文章推荐
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
Python正则表达式使用范例分享
Dec 04 Python
Python实现的简单dns查询功能示例
May 24 Python
python下10个简单实例代码
Nov 15 Python
5个很好的Python面试题问题答案及分析
Jan 19 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
python numpy数组复制使用实例解析
Jan 10 Python
python 实时调取摄像头的示例代码
Nov 25 Python
简单介绍Python中利用生成器实现的并发编程
May 04 #Python
简单分析Python中用fork()函数生成的子进程
May 04 #Python
python实现从字典中删除元素的方法
May 04 #Python
Python中利用原始套接字进行网络编程的示例
May 04 #Python
python通过索引遍历列表的方法
May 04 #Python
python实现将元祖转换成数组的方法
May 04 #Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 #Python
You might like
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
javascript multibox 全选
2009/03/22 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python异常处理操作实例详解
2018/08/28 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
比较一下entity bean和session bean
2013/12/27 面试题
成品仓管员岗位职责
2013/12/11 职场文书
乌镇导游词
2015/02/02 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js