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中readline判断文件读取结束的方法
Nov 08 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
python画一个玫瑰和一个爱心
Aug 18 Python
Python交互式图形编程的实现
Jul 25 Python
Python中print函数简单使用总结
Aug 05 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
python中setuptools的作用是什么
Jun 19 Python
python打开音乐文件的实例方法
Jul 21 Python
详解Python中下划线的5种含义
Jul 15 Python
关于Python使用turtle库画任意图的问题
Apr 01 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常用日期加减计算方法实例小结
2018/07/31 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
列举Python中吸引人的一些特性
2015/04/09 Python
Python psutil模块简单使用实例
2015/04/28 Python
Python NumPy库安装使用笔记
2015/05/18 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
Python何时应该使用Lambda函数
2019/07/02 Python
python mysql断开重连的实现方法
2019/07/26 Python
python 实现矩阵填充0的例子
2019/11/29 Python
Python正则表达式学习小例子
2020/03/03 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
解决方案设计综合面试题
2015/08/31 面试题
4s店市场专员岗位职责
2014/04/09 职场文书
体现团队精神的口号
2014/06/06 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
详解Python牛顿插值法
2021/05/11 Python
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers