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学习笔记(二)基础语法
Jun 06 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
Python 获得命令行参数的方法(推荐)
Jan 24 Python
python实现连续图文识别
Dec 18 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
在Python中append以及extend返回None的例子
Jul 20 Python
python 实现视频 图像帧提取
Dec 10 Python
python基于property()函数定义属性
Jan 22 Python
Python读取文件内容为字符串的方法(多种方法详解)
Mar 04 Python
python 弧度与角度互转实例
Apr 15 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&MYSQL留言板源码
2020/07/19 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
Jquery 实现图片轮换
2015/01/28 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
工程部经理岗位职责
2013/12/08 职场文书
我的求职择业计划书
2014/04/04 职场文书
2015元旦节寄语
2014/12/08 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
开学第一天的感想
2015/08/10 职场文书
小学运动会入场口号
2015/12/24 职场文书
nginx配置之并发频次限制
2022/04/18 Servers
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技