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爬虫之爬虫编写全记录
Nov 06 Python
快速入手Python字符编码
Aug 03 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
Python 分享10个PyCharm技巧
Jul 13 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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
Phpbean路由转发的php代码
2008/01/10 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
深入理解PHP内核(一)
2015/11/10 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
php输出形式实例整理
2020/05/05 PHP
JS 控制CSS样式表
2009/08/20 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
解决Python传递中文参数的问题
2015/08/04 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
2014年党员公开承诺践诺书
2014/03/25 职场文书
促销活动计划书
2014/05/02 职场文书
大学军训自我鉴定大全
2014/09/18 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python