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 urlopen 使用小示例
Sep 06 Python
python实现在pickling的时候压缩的方法
Sep 25 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
python删除列表内容
Aug 04 Python
requests和lxml实现爬虫的方法
Jun 11 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
简单的Python调度器Schedule详解
Aug 30 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
python3 sorted 如何实现自定义排序标准
Mar 12 Python
python speech模块的使用方法
Sep 09 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 smarty函数扩展
2010/03/15 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
js实现随机点名
2021/01/19 Javascript
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
Python微信操控itchat的方法
2019/05/31 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
python interpolate插值实例
2020/07/06 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
毕业生教师求职信
2013/10/20 职场文书
保安自我鉴定范文
2013/12/08 职场文书
开会迟到检讨书
2014/02/03 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
工作证明英文模板
2014/10/21 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python