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脚本实现网卡流量监控
Feb 14 Python
python模块之re正则表达式详解
Feb 03 Python
Python爬豆瓣电影实例
Feb 23 Python
Django中使用Celery的教程详解
Aug 24 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Python如何实现强制数据类型转换
Nov 22 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Python基础之元编程知识总结
May 23 Python
pandas提升计算效率的一些方法汇总
May 30 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通用检测函数集合
2011/02/08 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
PHP分享图片的生成方法
2018/04/25 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现定时播放mp3
2015/03/29 Python
Python中Class类用法实例分析
2015/11/12 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
解决DataFrame排序sort的问题
2018/06/07 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
如何利用find命令查找文件
2016/11/18 面试题
生产部统计员岗位职责
2014/01/05 职场文书
大型营销活动计划书
2014/04/28 职场文书
团支部建设方案
2014/05/02 职场文书
关于建议书的格式范文
2014/05/20 职场文书
技能比武方案
2014/05/21 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
工厂见习报告范文
2014/10/31 职场文书
仓管员岗位职责
2015/02/03 职场文书