python 使用多线程创建一个Buffer缓存器的实现思路


Posted in Python onJuly 02, 2020

这几天学习人脸识别的时候,虽然运行的没有问题,但我却意识到了一个问题

在图片进行传输的时候,GPU的利用率为0

也就是说,图片的传输速度和GPU的处理速度不能很好衔接

于是,我打算利用多线程开发一个buffer缓存

实现的思路如下

定义一个Buffer类,再其构造函数中创建一个buffer空间(这里最好使用list类型)

我们还需要的定义线程锁LOCK(数据传输和提取的时候会用到)

因为需要两种方法(读数据和取数据),所以我们需要定义两个锁

实现的代码如下:

#-*-coding:utf-8-*-
import threading 

class Buffer:

  def __init__(self,size):
    self.size = size
    self.buffer = []
    self.lock = threading.Lock()
    self.has_data = threading.Condition(self.lock) # small sock depand on big sock
    self.has_pos = threading.Condition(self.lock)
  def get_size(self):
    return self.size
  def get(self):
    with self.has_data:
      while len(self.buffer) == 0:
        print("I can't go out has_data")
        self.has_data.wait()
        print("I can go out has_data")
      result = self.buffer[0]
      del self.buffer[0]
      self.has_pos.notify_all()
    return result
  def put(self, data):
    with self.has_pos:
      #print(self.count)
      while len(self.buffer)>=self.size:
        print("I can't go out has_pos")
        self.has_pos.wait()
        print("I can go out has_pos")
      # If the length of data bigger than buffer's will wait
      self.buffer.append(data)
      # some thread is wait data ,so data need release
      self.has_data.notify_all()
  
if __name__ == "__main__":
	buffer = Buffer(3)
	def get():
	  for _ in range(10000):
	    print(buffer.get())
	    
	def put():
	  a = [[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9],[1,2,3,4,5,6,7,8,9]]
	  for _ in range(10000):
	    buffer.put(a)
  th1 = threading.Thread(target=put)
  th2 = threading.Thread(target=get)
  th1.start()
  th2.start()
  th1.join()
  th2.join()

python 使用多线程创建一个Buffer缓存器的实现思路

总结

到此这篇关于python 使用多线程创建一个Buffer缓存器的文章就介绍到这了,更多相关python 多线程Buffer缓存器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
八大排序算法的Python实现
Jan 28 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
Python3 翻转二叉树的实现
Sep 30 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
python3实现简单飞机大战
Nov 29 Python
用Python简陋模拟n阶魔方
Apr 17 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 #Python
Python使用OpenPyXL处理Excel表格
Jul 02 #Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 #Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 #Python
如何基于Python爬取隐秘的角落评论
Jul 02 #Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 #Python
Python使用tkinter实现摇骰子小游戏功能的代码
Jul 02 #Python
You might like
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
从0开始学Vue
2016/10/27 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python中正则表达式的使用详解
2014/10/17 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python进行两个表格对比的方法
2018/06/27 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python bisect模块原理及常见实例
2020/06/17 Python
python属于哪种语言
2020/08/16 Python
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
基督教追悼会答谢词
2015/09/29 职场文书