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减少循环层次和缩进的技巧分析
Mar 15 Python
python数据封装json格式数据
Mar 04 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
pytorch训练imagenet分类的方法
Jul 27 Python
对Django中内置的User模型实例详解
Aug 16 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 Python
python 高阶函数简单介绍
Feb 19 Python
python自动化之如何利用allure生成测试报告
May 02 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
PHP 数组入门教程小结
2009/05/20 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
深入理解python函数递归和生成器
2016/06/06 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
python读取并写入mat文件的方法
2019/07/12 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
python如何随机生成高强度密码
2020/08/19 Python
python常量折叠基础知识点讲解
2021/02/28 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
2014年三八妇女节活动总结
2014/03/01 职场文书
入股协议书范本
2014/04/14 职场文书
重点工程汇报材料
2014/08/27 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技