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用csv写入文件_消除空余行的方法
Jul 06 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
Python 脚本的三种执行方式小结
Dec 21 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
python读取文件指定行内容实例讲解
Mar 02 Python
基于Python实现简单学生管理系统
Jul 24 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 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中防止伪造跨站请求的小招式
2011/09/02 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php中检查文件或目录是否存在的代码小结
2012/10/22 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
Vue header组件开发详解
2018/01/26 Javascript
three.js利用卷积法如何实现物体描边效果
2019/11/27 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
TensorFlow实现Logistic回归
2018/09/07 Python
python基于递归解决背包问题详解
2019/07/03 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
个性发展自我评价
2014/02/11 职场文书
教师现实表现材料
2014/02/14 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python