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文件和目录操作详解
Feb 08 Python
玩转python爬虫之cookie使用方法
Feb 17 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
用pycharm开发django项目示例代码
Oct 24 Python
Python修改文件往指定行插入内容的实例
Jan 30 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python如何将两个txt文件内容合并
Oct 18 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 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 foreach 使用&(与运算符)引用赋值要注意的问题
2010/02/16 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
PHP实现递归无限级分类
2015/10/22 PHP
微信自定义分享php代码分析
2016/11/24 PHP
一端时间轮换的广告
2006/06/26 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
使用Python生成XML的方法实例
2017/03/21 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
Python中@property的理解和使用示例
2019/06/11 Python
Numpy之reshape()使用详解
2019/12/26 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
司机的工作范围及职责
2013/11/13 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
廉洁自律个人总结
2015/02/14 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Python一行代码实现自动发邮件功能
2021/05/30 Python