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之入门(二)基本数据类型
May 25 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
Python3读取文件常用方法实例分析
May 22 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 Python
Python进阶之尾递归的用法实例
Jan 31 Python
python多线程之事件Event的使用详解
Apr 27 Python
Python读写zip压缩文件的方法
Aug 29 Python
python super的使用方法及实例详解
Sep 25 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
Python requests模块安装及使用教程图解
Jun 30 Python
python保存图片的四个常用方法
Feb 28 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
php检测图片木马多进制编程实践
2013/04/11 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python爬虫超时的处理的实例
2018/12/19 Python
详解Python3注释知识点
2019/02/19 Python
Python和Go语言的区别总结
2019/02/20 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
火锅店创业计划书范文
2014/02/02 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
浅谈JS的原型和原型链
2021/06/04 Javascript
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript