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画ROC曲线和AUC值计算
Sep 19 Python
解决Python3中的中文字符编码的问题
Jul 18 Python
详解python while 函数及while和for的区别
Sep 07 Python
python正则表达式匹配[]中间为任意字符的实例
Dec 25 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
python中pyqtgraph知识点总结
Jan 26 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
Python 全局空间和局部空间
Apr 06 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中截取字符串支持utf-8
2007/01/18 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP分享图片的生成方法
2018/04/25 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Python 变量类型详解
2018/10/10 Python
python实现支付宝转账接口
2019/05/07 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python如何对链表操作
2020/10/10 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
档案保密承诺书
2014/06/03 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
综合测评自我评价
2015/03/06 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js