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

 更新时间:2015年05月04日 10:50:19   投稿:goldensun  
这篇文章主要用示例简单介绍了Python下线程之间的共享和释放,线程一直是Python开发者中的热点问题,需要的朋友可以参考下

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

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 Web开发通信协议WSGI uWSGI uwsgi使用对比全面介绍

    Python Web开发通信协议WSGI uWSGI uwsgi使用对比全面介绍

    这篇文章主要为大家介绍了Python Web开发通信协议WSGI uWSGI uwsgi使用对比全面介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • python安装whl文件的实战步骤

    python安装whl文件的实战步骤

    whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件,下面这篇文章主要给大家介绍了关于python安装whl文件的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python使用os.listdir和os.walk获取文件路径

    Python使用os.listdir和os.walk获取文件路径

    这篇文章主要介绍了Python使用os.listdir和os.walk获取文件路径,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python实现图像去雾效果的示例代码

    Python实现图像去雾效果的示例代码

    本文将利用《bringing old photos back to life》 的开源代码,并在此基础上进行修改,从而实现图像去雾的效果,感兴趣的小伙伴可以学习一下
    2022-02-02
  • python实现ip代理池功能示例

    python实现ip代理池功能示例

    这篇文章主要介绍了python实现ip代理池功能,结合实例形式分析了Python IP代理池的实现原理及相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • python super用法及原理详解

    python super用法及原理详解

    这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python3使用Matplotlib 绘制精美的数学函数图形

    Python3使用Matplotlib 绘制精美的数学函数图形

    这篇文章主要介绍了Python3使用Matplotlib 绘制精美的数学函数图形,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Python中atexit模块的基本使用示例

    Python中atexit模块的基本使用示例

    这篇文章主要介绍了Python中atexit模块的基本使用示例,示例代码基于Python2.x版本,注意其和Python3的兼容性,需要的朋友可以参考下
    2015-07-07
  • django之使用celery-把耗时程序放到celery里面执行的方法

    django之使用celery-把耗时程序放到celery里面执行的方法

    今天小编就为大家分享一篇django之使用celery-把耗时程序放到celery里面执行的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • pygame学习笔记(4):声音控制

    pygame学习笔记(4):声音控制

    这篇文章主要介绍了pygame学习笔记(4):声音控制,本文讲解了pygame.mixer启动与初始化、播放声音片段wav文件、播放mp3、wma、ogg音乐文件、控制音量、制作mp3播放器中遇到的问题等内容,需要的朋友可以参考下
    2015-04-04

最新评论