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获取文件ssdeep值的方法
Oct 05 Python
Python3处理文件中每个词的方法
May 22 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
python使用threading.Condition交替打印两个字符
May 07 Python
了解不常见但是实用的Python技巧
May 23 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
Python接口自动化测试的实现
Aug 28 Python
python开发一个解析protobuf文件的简单编译器
Nov 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生成及获取JSON文件的方法
2016/08/23 PHP
轻松实现php文件上传功能
2017/02/17 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
jQuery实现对象转为url参数的方法
2017/01/11 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
浅谈python标准库--functools.partial
2019/03/13 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
python属于解释型语言么
2020/06/15 Python
python输入中文的实例方法
2020/09/14 Python
python利用opencv实现颜色检测
2021/02/23 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
生物科学专业个人求职信范文
2013/12/07 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
党员违纪检讨书
2014/02/18 职场文书
《搭石》教学反思
2014/04/07 职场文书
新郎新娘答谢词
2015/01/04 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
MySQL新手入门进阶语句汇总
2022/09/23 MySQL