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系列之新版本导入httplib模块报ImportError解决方案
May 23 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
深入理解Python中变量赋值的问题
Jan 12 Python
python线程池threadpool使用篇
Apr 27 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
python add_argument()用法解析
Jan 29 Python
Django中的session用法详解
Mar 09 Python
Django import export实现数据库导入导出方式
Apr 03 Python
Python decimal模块使用方法详解
Jun 08 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
destoon复制新模块的方法
2014/06/21 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python守护进程和脚本单例运行详解
2017/01/06 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
Python递归函数实例讲解
2019/02/27 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
事务机电主管工作职责
2014/02/25 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
租房协议书样本
2014/08/20 职场文书
会议通知格式范文
2015/04/15 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server