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 相关文章推荐
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
python如何删除文件中重复的字段
Jul 16 Python
Python partial函数原理及用法解析
Dec 11 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
基于Python正确读取资源文件
Sep 14 Python
编写python程序的90条建议
Apr 14 Python
浅谈python数据类型及其操作
May 25 Python
Python实现滑雪小游戏
Sep 25 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新手上路(六)
2006/10/09 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
动态加载js的几种方法
2006/10/23 Javascript
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
vue登录注册实例详解
2019/09/14 Javascript
js实现批量删除功能
2020/08/27 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python命令行工具Click快速掌握
2019/07/04 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
UNIX文件系统常用命令
2012/05/25 面试题
办公室秘书岗位职责范本
2014/02/11 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
院系推荐意见
2015/06/05 职场文书
小学六年级毕业感言
2015/07/30 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
用Java实现简单计算器功能
2021/07/21 Java/Android
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android